[英]Gradle Buildship project dependency cycle false positive
所以我有一個多項目gradle構建,包括:
myapp
myapp2
shared
testLib
myapp
和myapp2
在shared
上具有編譯依賴項。
testLib
項目還對shared
擁有一個編譯項目依賴項。 它的存在是為了定義一些使用shared
類的單元測試助手代碼。 這些類位於其main
SourceSet中,因為此項目的目的是構建包含測試幫助程序類的庫。
現在, shared
項目具有單元測試。 這些測試利用testLib
的幫助程序代碼。 因此, shared
對testLib
具有testCompile項目依賴性。
Gradle對此沒有任何問題。 它理解先構建shared
,然后構建testLib
,然后在shared
運行單元測試就可以了。 但是, 造船業卻沒有。 在導入構建后,它將其標記為項目依賴周期:“在項目'shared'的構建路徑中檢測到一個周期。該周期包含項目{shared,testLib}。” 以及針對testLib
項目的類似消息。
那么,為什么不將testLib
滾動到shared
的測試sourceSet中呢? 嗯,事實是, myapp
和myapp2
的單元測試也使用了某些單元測試幫助程序代碼。 這兩個項目都具有對shared
編譯項目依賴性以及對testLib
testCompile項目依賴性。
有什么方法可以讓Buildship了解這實際上不是項目依賴周期嗎?
編輯:
我已經在這里嘗試了部分解決方案: https ://softnoise.wordpress.com/2014/09/07/gradle-sub-project-test-dependencies-in-multi-project-builds/將我的testLib構建更改為此(將測試幫助程序類從main
移回test
sourceSet后:插件{id'java'}
configurations {
testOutput
}
dependencies {
compile project(':shared')
}
task jarTest (type: Jar) {
from sourceSets.test.output
classifier = 'test'
}
artifacts {
testOutput jarTest
}
並通過以下方式更改我的shared
項目以引用新的testLib-test.jar
:
testCompile project(path: ':testLib', configuration: 'testOutput')
仍然沒有運氣。 gradle再次沒有問題並且構建良好,但是在Eclipse中刪除並重新導入項目后,Buildship返回與以前相同的周期警告。
Buildship目前是否無法處理這種情況?
我想這是因為eclipse對於整個項目(對於main和test而言)只有一個classpath
。 因此,gradle compile
和testCompile
是兩種不同的配置-導入eclipse時,您會發現問題。
您需要擺脫依賴關系之一。 也許您可以從testLib創建一個單獨的測試項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.