我目前在 gradle 构建方面遇到了这个奇怪的问题。以下是详细信息。
我目前有一个基于 java-spring boot 的多模块 gradle 项目,其结构如下
RootProjectDir
SubProjectA
SubProjectB
SubProjectCommon
各项目的build.gradle文件如下
RootProjectDir build.gradle
dependencies {
compile project(":SubProjectA")
compile project(":SubProjectB")
compile project(":SubProjectCommon")
testCompile('org.springframework.boot:spring-boot-starter-test')
}
SubProjectA build.gradle
dependencies {
compile project(":SubProjectCommon")
}
SubProjectB build.gradle
dependencies {
compile project(":SubProjectCommon")
}
SubProjectCommon build.gradle
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-jdbc')
compile('org.springframework.boot:spring-boot-starter-web')
.....
.....
}
当我执行
gradle clean build
在 SubProjectA 的 compileTestJava 阶段构建失败。 SubProjectA 测试对 SubProjectCommon 中的类具有编译时依赖性。
如果我只执行以下内容
gradle :subProjectA compileTestJava
构建再次成功。
失败并显示无法解析 SubProjectCommon 类的消息。
奇怪的是,在 IntelliJ IDEA 中,它没有显示 SubProjectA 测试类的任何编译问题,并且测试执行得很好。另外当我刚刚执行
gradle clean test
一切正常。
我什至尝试将 testCompile 依赖于 SubProjectA build.gradle 中的 SubProjectCommon,如下所示
SubProjectA build.gradle
dependencies {
compile project(":SubProjectCommon")
testCompile project(":SubProjectCommon")
}
但还是不行
PS:-我目前只为 SubProjectA 类编写了测试用例。
最佳答案
IDE 不能很好地遵循模块路径,尤其是 Eclipse,因此所有内容通常都包含在一起,因此您不会遇到任何路径问题。
Gradle 对不同项目进行了清晰的区分。
因此,如果您的类位于测试文件夹中,您可能需要使用以下内容正确引用测试集:
testCompile project(":SubProjectCommon").sourceSets.test.output
或
compile project(":SubProjectCommon").sourceSets.test.output
取决于哪个 sourceSet 使用其他项目中的类。
关于java - GradlecompileTestJava 在 gradle clean 构建期间失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45759052/