[英]Transitive project dependencies not found
我有一個包含4個項目的扁平項目層次結構。 讓我們稱它們為B,C,D,M,它們具有以下線性依賴關系:
B - > C - > M - > D.
- > =“取決於”
項目B,C和M具有build.gradle和settings.gradle。 settings.gradle始終對所有依賴項目執行includeFlat。 如果是B,則包括平面('D','M','C')。 build.gradle定義了始終定義它依賴的項目的依賴關系。 如果B是編譯項目('C')。
如果我嘗試構建項目BI遇到問題,解析B后,gradle嘗試解析C的build.gradle並失敗,因為它找不到M.
* What went wrong:
A problem occurred evaluating project ':C'.
> Project with path 'M' could not be found in project ':C'.
我認為調試輸出的相關部分是:
Included projects: [root project 'B', project ':C', project ':D', project ':M']
盡管在其他settings.gradle文件和build.gradle依賴項中定義了什么,但似乎gradle按字母順序對include進行排序。
當我創建CI時,我也想知道為什么我需要將D包含在includeFlat設置中。 但它有效,因為它將包含命令為D,M。
我目前看到的唯一“解決方案”是我刪除了B中的項目依賴項並依賴於C的構建jar。但是這具有巨大的(破壞游戲)缺點,當我在DI中更改某些東西需要完整構建時,發布和“從nexus刷新”循環直到變化可見。 由於C,M和D仍在積極開發中,因此這不是一種選擇。
為了解決這個問題,我需要告訴eclipse插件,當它發現一個jar依賴項時,它也是一個項目,它將項目依賴項添加到類路徑而不是jar依賴項。
您似乎對Gradle多項目構建的工作方式存在一些誤解。 以下是一些可能有助於您了解正在發生的事情的事實:
settings.gradle
。 settings.gradle
中include
語句的順序沒有相關性。 project(":M")
是取決於該項目的default
配置的簡寫。 Gradle將其轉換為對M中負責構建其default
配置工件的那些任務的依賴。 請注意,根據項目並不意味着在該項目中的所有任務將在這取決於項目的任何任務之前運行。 ":M"
是絕對項目路徑( :
表示根項目),而"M"
是相對項目路徑。 相對路徑被解釋為相對於當前項目。 為了更深入地了解多項目構建,我建議學習Gradle用戶指南中的“多項目構建”一章,以及完整Gradle分發中的多項目構建示例。
整個混亂是由於缺少':'造成的。 Gradle似乎區分了compile project('M')
和compile project(':M')
,當項目(在這種情況下,行在C中)被其他項目包含時。 只需構建C與兩個版本都可以正常工作。 gradle projects
在兩種情況下都返回項目C的相同樹。
我無法解釋究竟是什么區別,我希望有人可以向我解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.