2013-02-10 51 views
0

我有一個多項目(多個java子項目),我計劃將其上傳到Maven存儲庫(當前是本地的),包括sourcesjavadoc構件。我只是將下面的代碼添加到每個子項目,然後maven install這項工作:將公共代碼移動到子項目中{block}構建

apply plugin: 'maven' 

task sourcesJar(type: Jar, dependsOn:classes) { 
     from sourceSets.main.allSource 
     classifier = 'sources' 
} 
task javadocJar(type: Jar, dependsOn:javadoc) { 
     from javadoc.destinationDir 
     classifier = 'javadoc' 
} 
artifacts { 
     archives jar 
     archives sourcesJar 
     archives javadocJar 
} 

現在它不是最好有在10個子項目相同的代碼,所以我決定將這個代碼進入的subprojects { ... }配置父母項目。然而,現在它不再工作了:只有空的源代碼和javadoc jar被構建,正常的jar被忽略,並且maven install不再複製文件到本地maven倉庫。如何做到這一點?

謝謝。

回答

1

父項目的構建腳本在其子項目的構建腳本之前被評估。將某些代碼提升到父項目的構建腳本時,必須確保評估順序保持不變,即提升的代碼不會急於讀取僅由子項目的構建腳本設置的屬性。例如,如果javadoc.destinationDir由子項目的構建腳本設置,則您必須提取該代碼,或者推遲在父構建腳本中對from javadoc.destinationDir表達式的評估。

推遲評估有幾種技術。某些屬性(如歸檔任務的frominto)接受封閉;因此你可以簡單地做from { javadoc.destinationDir }。另一種選擇是使用鉤子,如gradle.projectsEvaluated {},project.afterEvaluate {}task.doFirst {}。決定使用哪種技術的第一步是在Gradle Build Language Reference中查找有問題的財產。

沒有看到更多的構建腳本,我最好的猜測是你的特殊問題與不將apply plugin: "java"提升到父構建腳本的subprojects {}塊有關。

配置注入(例如,通過subprojects {})的替代方法是將通用代碼放入單獨的構建腳本中,並且讓項目構建腳本包含代碼apply from:。在某些情況下,與配置注入相比,這是一種更容易(有選擇性)共享代碼的方式。通常,這兩種方法一起使用。

+0

嗨,彼得,謝謝,將'apply'插件:'java''移動到'subprojects'中解決了問題! – 2013-02-10 09:48:18