2015-02-11 26 views
2

我有一個包含許多子項目和子子項目的gradle項目。我們發現了一個奇怪的條件,即是這樣的:具有重複的子項目名稱的gradle混淆依賴關係

這裏是一個abrievated項目結構:

  • 的build.gradle
  • settings.gradle
  • 子1
    • 共同
      • build.gradle
      • src
    • 子一
      • 共同
        • 的build.gradle
        • SRC
      • 戰爭
        • 的build.gradle
        • SRC
  • SUB2

我的問題是 - 子:分1:子一:戰爭取決於:分1:常見的:子1:子a:common和:sub-1:sub-a:war無法構建,因爲一些gradle如何看到兩個依賴關係,但只保留一個,:sub-1:sub-a:common。運行gradle依賴會顯示一條如下所示的行:sub-1:common - > sub-1:sub-a:common

看起來gradle在計算依賴關係時丟棄了一些東西,或者看起來太聰明,項目具有相同的「最終」名稱,並且只在計算或蒸餾的依賴關係列表中選擇其中的一個。

當然如果我重命名:sub-1:sub-a:common to:sub-1:sub -a:common1問題就消失了。 FWIW:共同的子項目都會生成jar文件 - 但它們設置的是特定的archivesBaseName,它們有很大不同。

確保「葉」子項目的所有名稱都是全球唯一的缺點,有沒有辦法解決這個問題? (注意:可能會出現退化的代碼/項目結構模式 - 但是,這出現在ant-> gradle轉換項目中,我們不會在此階段僅更改構建工具來更改結構。我歡迎評論改變結構;我確實想看看我能做些什麼,我可以做什麼,我有第一個)

+0

問題沒有解決,但原因和解決辦法更清楚一點。對於好奇的[這裏](http://forums.gradle.org/gradle/topics/dependency-substitution-wrong-with-more-than-one-sub-project-with-same-name)是gradle/forum post關於同樣的事情 - 但更清楚的問題描述。和[這裏](https://github.com/fwelland/Submarine)是一個github項目,說明了這種情況。 – fwelland 2015-02-13 13:02:31

回答

0

一個快速解決方案是使項目group名稱獨特。

當然,如果您需要從相同的項目發佈工件,這可能是不可能的。但通常情況並非如此,並且更改group名稱可以解決衝突。

project(':sub1:common').group = 'sub1.common' 
project(':sub1:suba:common').group = 'sub1.suba.common' 
相關問題