我目前正在使用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
一切正常。
我甚至尝试将SubCompjectA中的testCompile依赖项放在SubProjectA build.gradle中,就像这样
SubProjectA build.gradle
dependencies {
compile project(":SubProjectCommon")
testCompile project(":SubProjectCommon")
}
但仍无效
PS: - 我目前只为SubProjectA类编写测试用例。
答案 0 :(得分:1)
IDE并不能很好地支持模块路径,尤其是Eclipse,因此所有内容通常都包含在一起,因此您不会遇到任何路径问题。
Gradle在不同项目之间做出了明确的区分。
因此,如果您的课程位于测试文件夹中,您可能需要使用以下内容正确引用测试集:
testCompile project(":SubProjectCommon").sourceSets.test.output
或
compile project(":SubProjectCommon").sourceSets.test.output
取决于哪个sourceSet正在使用其他项目中的类。