2017-08-18 127 views
0

我目前遇到了gradle build這個奇怪的問題。以下是詳細信息。Gradle compileTestJava在gradle clean build期間失敗

我現在有一個Java的春季啓動在下面的結構

RootProjectDir 
     SubProjectA 
     SubProjectB 
     SubProjectCommon 

項目的每一個的的build.gradle文件如下

RootProjectDir建立基於多模塊項目的gradle。 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這個乾淨的構建

構建失敗時SubProjectA的compileTestJava階段。 SubProjectA測試具有編譯時間依賴SubProjectCommon中的類。

如果我只是執行以下

gradle這個:subProjectA compileTestJava

構建成功一次。

它無法解決SubProjectCommon類無法解析的消息。

奇怪的是,在IntelliJ IDEA中,它沒有顯示SubProjectA測試類的任何編譯問題,並且測試執行得很好。此外,當我剛剛執行

gradle這個乾淨的測試

一切工作正常。

我甚至嘗試把一個testCompile依賴於SubProjectCommon在SubProjectA的build.gradle這樣

SubProjectA構建。gradle這個

dependencies { 
    compile project(":SubProjectCommon") 
    testCompile project(":SubProjectCommon") 

    } 

,但仍然無法正常工作

PS:只爲SubProjectA類-I目前已經編寫測試用例。

+0

我遇到了Gradle 4.1和Spring Boot 1.5.4的類似問題 –

回答

1

IDE不會非常好地遵守模塊路徑,尤其是Eclipse,所以一切通常都包含在一起,因此您不會遇到任何路徑問題。

Gradle使不同項目之間的乾淨區分。

所以,如果你的類是在test文件夾,您可能需要參考的測試集正確使用下面的:

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

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

,這取決於sourceSet使用類從另一個項目。