2017-04-07 64 views
1

我有項目A與gradle構建。我還有另一個項目B,也有Gradle構建。我想將項目B的jar包括到項目A的戰爭中。我可以從項目A的構建腳本中調用項目B的構建腳本(參見下文)。
但是我不能將項目B的jar設置爲任務buildB的輸出文件。如何從GradleBuild任務設置另一個Gradle構建腳本任務的輸出文件?

是否有任何方法將任務buildB的輸出文件設置爲項目B的jar(它是任務jar的輸出文件)?

task buildB(type: GradleBuild) { 
    buildFile = "../BProject/build.gradle" 
    tasks = ["clean", "jar"]  // jar task produce xxx.jar as it's outputs.files 

    // HERE, any script to set xxx.jar as outputs.files of task buildB??? 
} 

war { 
    from (buildB) {    // can not get xxx.jar from buildB 
     into "WEB-INF/classes" 
    } 
} 
+0

我猜你需要建立一個多模塊項目,並定義一個'型項目的compile'依賴。 – Opal

回答

0

這就是我所做的。

/settings.gradle

include 'AProject', 'BProject' 

/AProject/build.gradle

task buildB(type: GradleBuild) { 
    buildFile = "../BProject/build.gradle" 
    tasks = ["clean", "jar"]  // jar task produce xxx.jar as it's outputs.files 
} 

war { 
    dependsOn buildB 
    doFirst { 
     from (project(':BProject').tasks['jar']) { 
      into "WEB-INF/classes" 
     } 
    } 
} 
2

你可能需要配置multi module項目並定義project -scope依賴。

既然答案完整答案將會很長,here你可以找到一個演示,說明如何完成。

該演示包含兩個項目。一個項目是爲了戰爭而建立的,並且依賴於另一個爲戰爭而建的項目。如果您構建a項目,b將自動構建並作爲jar包含。

+0

謝謝你的回答,歐泊。但是buildA不依賴於buildB的jar,它只使用jar作爲可下載的資源。所以它不需要將項目B定義爲編譯依賴關係。 但是你的回答和github源碼讓我想到了多項目,所以我想出了一個解決方案。再次感謝! – hanjoonk

相關問題