簡體   English   中英

Gradle Buildship項目依賴周期誤報

[英]Gradle Buildship project dependency cycle false positive

所以我有一個多項目gradle構建,包括:

myapp
myapp2
shared
testLib

myappmyapp2shared上具有編譯依賴項。

testLib項目還對shared擁有一個編譯項目依賴項。 它的存在是為了定義一些使用shared類的單元測試助手代碼。 這些類位於其main SourceSet中,因為此項目的目的是構建包含測試幫助程序類的庫。

現在, shared項目具有單元測試。 這些測試利用testLib的幫助程序代碼。 因此, sharedtestLib具有testCompile項目依賴性。

Gradle對此沒有任何問題。 它理解先構建shared ,然后構建testLib ,然后在shared運行單元測試就可以了。 但是, 造船業卻沒有。 在導入構建后,它將其標記為項目依賴周期:“在項目'shared'的構建路徑中檢測到一個周期。該周期包含項目{shared,testLib}。” 以及針對testLib項目的類似消息。

那么,為什么不將testLib滾動到shared的測試sourceSet中呢? 嗯,事實是, myappmyapp2的單元測試也使用了某些單元測試幫助程序代碼。 這兩個項目都具有對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 compiletestCompile是兩種不同的配置-導入eclipse時,您會發現問題。

您需要擺脫依賴關系之一。 也許您可以從testLib創建一個單獨的測試項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM