0
考慮以下多項目構建腳本:搖籃工程構建順序Maven的任務
的build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'maven'
group = "myorg"
version = "1.0.0-SNAPSHOT"
}
project(':client') {
dependencies {
compile 'myorg:shared:1.0.0-SNAPSHOT'
}
}
與以下文件:
├── build.gradle
├── client
│ └── src
│ └── main
│ └── java
│ └── myorg
│ └── client
│ └── MyOrgClient.java
├── settings.gradle
└── shared
└── src
└── main
└── java
└── myorg
└── shared
└── MyOrgObj.java
在上面文件MyOrgClient.java包括myorg.shared.MyOrgObj
和settings.gradle有單行include 'client', 'shared'
問題
項目/任務構建順序就像在本地安裝和部署到遠程倉庫沒有考慮到隱含的項目依賴的Maven相關的任務。由於gradle這個不知道'myorg:shared:1.0.0-SNAPSHOT'
由project(':shared')
創建,構建順序是:client -> :shared
和導致錯誤像下面這樣:
$ gradle install
:client:compileJava
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':client:compile'.
> Could not find myorg:shared:1.0.0-SNAPSHOT.
Required by:
myorg:client:1.0.0-SNAPSHOT
問: 是否有解決這個問題的標準方式?我已嘗試這些解決方案沒有成功:
- 使用
mustRunAfter
但遇到任務尚未存在的問題。我也並不認爲這將有大量的項目 - 添加
archives project(':shared')
到客戶的依賴 - 添加
compile project(':shared')
到客戶的依賴,然後從產生的聚甲醛去除它很好地擴展。不幸的是,這並不依賴添加到安裝任務或artifactoryPublish編輯:這實際上是解決辦法。項目依賴將提供在生成的pom.xml如此明確組的正確版本/名/組:名稱:不需要版本依賴
我在問題中提到我有一個settings.gradle,這個行包含'client','shared'。我不確定把它分成幾行可以改變任何東西 – matheeeny
這可行。他們誤解我的關鍵是我不知道項目依賴關係會創建一個具有正確的組/名稱/版本信息的pom.xml。我認爲這是因爲我的早期問題是依賴項目沒有定義版本或組。 – matheeeny