Я переношу многомодульный проект Gradle Java из Gradle 4.10
в Gradle 6.3
. Структура проекта выглядит следующим образом:
├── build.gradle
├── our-webapp
│ ├── build.gradle
│ └── src
│ ├── main
│ ├── integrationTest
│ └── test
└── cli-util
├── build.gradle
└── src
├── main
├── integrationTest
└── test
cli-util
имеет зависимость от веб-приложения для использования его классов. build.gradle
выглядит так:
plugins {
id 'java'
}
sourceSets {
integrationTest {
compileClasspath += sourceSets.main.output + sourceSets.test.output
runtimeClasspath += sourceSets.main.output + sourceSets.test.output
java.srcDir 'src/integrationTest/java'
resources.srcDir 'src/integrationTest/resources'
}
}
configurations {
integrationTestImplementation.extendsFrom testImplementation
integrationTestRuntime.extendsFrom testRuntime
}
dependencies {
implementation project(':our-webapp')
}
task integrationTest(type: Test) {
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}
А теперь интересно то, что тесты под cli-util/src/intergrationTest
работают нормально в Intellij IDEA, но они не работают с терминала всякий раз, когда есть импорт класса, определенного в webapp
проект. Ошибка: java.lang.NoClassDefFoundError: com/example/web/SomeClass
.
Я уже пробовал разные подходы, включая использование java-library
плагина в cli-util
проекте и импорт webapp
проекта, такого как api project(':our-webapp')
, но он все равно не работает.
Та же проблема в Gradle 5.6.x
.
Есть ли какие-то особые изменения, которые я принял во внимание, чтобы заставить его работать?