配置

2013-04-05 76 views
1

我有一個項目的gradle格式化這樣配置

  • container/
    • dist/
    • mod1/
      • build.gradle
    • mod2/
      • build.gradle
    • mod3/
      • build.gradle
    • build.gradle

基本上是一個檔次的項目有很多的子模塊。我想要做的是當你在容器/ build.gradle上運行程序集時,它會運行所有子項目上的內部版本。這部分很簡單。現在我試圖完成集中配置設置和參數。

這裏是從我的容器/的build.gradle文件

subprojects { 
    apply plugin: 'java' 
    apply plugin: 'scala' 

    jar { 
     manifest.attributes provider: 'OnusPride' 
    } 

    property { 
     sourceCompatibility = 1.7 
     archivePath = file("dist") 
    } 

    ext { 
     springVersion = "3.2.1.RELEASE" 
     springSecurityWebVersion = "3.1.3.RELEASE" 
     springSecurityOauth2Version = "1.0.1.RELEASE" 
     jacksonCoreVersion = "2.1.2" 
    } 

    dependencies { 
     testCompile 'junit:junit:4.8.2' 
    } 
} 

我想配置所有模塊,當他們完成這樣一個地方剪斷他們的各種組裝任務,javajar,scalajar,戰爭等,對把輸出放在容器/ dist文件夾中。我怎麼做?

另外,沒有人有一個相當複雜,寫得很好,多模塊gradle項目的例子。比你好的世界更有意義的東西會非常有幫助。在同一時間學習groovy和gradle有點困難。

+0

我注意到你聲明瞭scala和java插件,這會導致你的java代碼被構建兩次。請參閱http://stackoverflow.com/questions/15828819/how-to-support-multiple-projects-in-multiple-languages-java-and-scala-in-gradl – iain 2013-04-05 18:33:04

回答

2

我認爲你有不同的選擇。 一種解決方案可能是在子項目中引入一個常見任務,將AbstractArchiveTask類型的任務的所有輸出複製到dist文件夾。這應該是這樣的:

subprojects{ 
    task copyToDists(type:Copy){ 
     into project.rootProject.file("dists") 
     from tasks.withType(AbstractArchiveTask) 
    } 
} 

該解決方案具有一些開銷,並且不被認爲是最好的做法,因爲你開始你的build內各地shuffeling東西。更好的方法是重新配置根據任務所需的文件夾中創建默認將罐子,戰爭,拉鍊:

subprojects{ 
    tasks.withType(AbstractArchiveTask){ 
     destinationDir = project.rootProject.file("dists") 
    } 
} 

希望幫助。

歡呼聲, 勒

0

這是我還沒有達到一個問題,但我要面對。我打算在container/build.gradle中創建一個任務,在其所有子項目中找到人工製品,然後將其複製到dist目錄。