Spring boot и многомодульный проект Gradle, не удалось правильно загрузить зависимости

В основном у меня есть сборка проекта весенней загрузки с Gradle. У проекта есть корневой проект, который содержит еще 4 подмодуля. Корневой проект settings.gradle выглядит так:

rootProject.name = 'proj'

include 'proj-app'
include 'proj-integration-tests'
include 'proj-model'
include 'proj-service'

Модуль приложения содержит плагин spring-boot-gradle и предоставляет некоторые API.

Я хотел создать подмодуль proj-integration-tests, содержащий только интеграционные тесты. Проблема начинается здесь, так как мне нужна зависимость от proj-app.

Итак, в proj-integration-tests у меня есть build.gradle, который содержит:

dependencies {
  testCompile('org.springframework.boot:spring-boot-starter-web')
  testCompile('org.springframework.boot:spring-boot-starter-test')
  testCompile project(':proj-app')
  testCompile project(':proj-model')
}

и мне нужна была зависимость proj-app с момента интеграционного теста:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ProjApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

требуется запуск приложения загрузки Spring (ProjApplication.class), которое находится в модуле proj-app.

Ошибка, которую я получил от Gradle: «не удается найти символ ProjApplication».

Почему Gradle не мог правильно управлять зависимостью proj-app? Заранее спасибо ;)


person brebDev    schedule 25.04.2018    source источник
comment
ProjApplication находится в упаковке? И я предполагаю, что ошибка, которую вы видите, связана с компиляцией интеграционных тестов, верно? Либо ProjApplication находится в пакете по умолчанию, что означает, что он не виден для классов в пакете, либо JAR приложения не добавляется в конфигурацию archives.   -  person Peter Ledbrook    schedule 26.04.2018
comment
Кроме того, почему бы не провести интеграционные тесты в proj-app? После этого вам не нужно ждать, пока приложение будет упаковано, прежде чем будут запущены интеграционные тесты. Хотя это зависит от характера интеграционных тестов.   -  person Peter Ledbrook    schedule 26.04.2018
comment
ProjApplication находится в пакете proj-app. Да, вы правы, ошибка возникает во время компиляции интеграционного теста. IDE вроде не жалуется на это, но когда я собираю продж из кли появляется ошибка.   -  person brebDev    schedule 27.04.2018
comment
Я хочу иметь другой модуль, который содержит только интеграционные тесты, так как тестировщики будут иметь доступ и к этому модулю, и я думаю, что так будет намного лучше.   -  person brebDev    schedule 27.04.2018
comment
Хорошо, достаточно честно. Итак, какую версию Gradle вы используете? Находятся ли интеграционные тесты в папке proj-integration-tests/src/test/java? Вы используете gradle test в проекте интеграционного тестирования? Появляется ли зависимость проекта при запуске gradle :proj-integration-test:dependencies --configuration testCompileClasspath?   -  person Peter Ledbrook    schedule 27.04.2018
comment
Привет, спасибо за ваши ответы, кажется, что артефакт proj-app был исполняемой загрузкой весенней толстой банки, а тест интеграции proj нуждался в стандартной версии в качестве зависимости. Ваше здоровье!   -  person brebDev    schedule 01.05.2018


Ответы (1)


Кажется, что зависимость proj-app построена в стиле весенней загрузки. Это означает, что полученный артефакт представляет собой исполняемый jar-файл spring boot far. Вот почему тесты proj-integration-tests не смогли найти классы из proj-app во время компиляции.
Итак, чтобы сохранить исполняемый jar-файл и чтобы иметь proj-app в качестве зависимости в модуле proj-integration-tests, я изменил build.gradle из приложения proj, чтобы создать обе банки: в стиле весенней загрузки и в стандартной версии:

bootJar {
baseName = 'proj-app-boot'
enabled = true
}

jar {
baseName = 'proj-app'
enabled = true
}
person brebDev    schedule 01.05.2018