gradle compileTestJava在gradle clean build

时间:2017-08-18 14:26:12

标签: java spring-boot gradle build.gradle

我目前正在使用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类编写测试用例。

1 个答案:

答案 0 :(得分:1)

IDE并不能很好地支持模块路径,尤其是Eclipse,因此所有内容通常都包含在一起,因此您不会遇到任何路径问题。

Gradle在不同项目之间做出了明确的区分。

因此,如果您的课程位于测试文件夹中,您可能需要使用以下内容正确引用测试集:

 testCompile project(":SubProjectCommon").sourceSets.test.output

 compile project(":SubProjectCommon").sourceSets.test.output

取决于哪个sourceSet正在使用其他项目中的类。