2014-01-07 23 views
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如此明確組的正確版本/名/組:名稱:不需要版本依賴

回答

0

你必須在項目之間定義的依賴性或多或少同樣的方式在Maven的:

例如像這樣:

project(':app') { 
    apply plugin: 'ear' 
    dependencies { 
    compile project (':webgui') 
    compile project (':service') 
    } 
} 

但你需要定義包含這樣的模塊settings.gradle:

include 'app' 
include 'domain' 
include 'service' 
include 'service-client' 
include 'webgui' 
+0

我在問題中提到我有一個settings.gradle,這個行包含'client','shared'。我不確定把它分成幾行可以改變任何東西 – matheeeny

+0

這可行。他們誤解我的關鍵是我不知道項目依賴關係會創建一個具有正確的組/名稱/版本信息的pom.xml。我認爲這是因爲我的早期問題是依賴項目沒有定義版本或組。 – matheeeny