2016-03-15 188 views
1

我正在玩用Eclipse的STS插件進行Gradle多項目構建。我在閱讀tutorial後認爲我已經掌握了基礎知識,但我無法重現所顯示的行爲。當添加Gradle多項目任務執行行爲

allprojects { 
    task hello << {task -> println "I'm $task.project.name" } 
} 
subprojects { 
    hello << {println "- I GradleMaster"} 
} 

to build.gradle的父項目我會假設爲每個項目執行任務'你好'。對於子項目實際上2倍,但結果只有:

[sts] ----------------------------------------------------- 
[sts] Starting Gradle build for the following tasks: 
[sts]  :hello 
[sts] ----------------------------------------------------- 
:hello 
I'm GradleMaster 

BUILD SUCCESSFUL 

我的項目樹看起來或多或少是這樣的:

Application/ 
    GradleMaster/ 
     build.gradle 
     settings.gradle 
    EAR/ 
     build.gradle 
    EJB/ 
     build.gradle 
    AppClient/ 
     build.gradle 

GradleMaster/settings.gradle:

include ':EAR', ':EJB', ':AppClient' 

如您所見,父項目與子項目處於同一級別。我已經將其與根級項目的另一種方式相提並論,但我沒有注意到任何差異。

我也想知道在所有項目都有共同的根項目上執行任務時gradle的行爲。例如,如果所有應用「基本」插件的應用程序都不應該對根項目進行「清理」,則會導致所有子項目也執行它們的「乾淨」版本?

回答

0

在寫這個問題時,我沒有想到它可能是Eclipse STS插件而不是Gradle本身的問題。事實上,我甚至沒有提到我在Eclipse中使用Gradle,這使得這個問題幾乎無法回答。

原來是STS插件調用任務的方式。有任務和任務選擇器。調用任務僅在項目中執行任務,而調用任務選擇器將執行多生成項目中所有相同名稱的任務。

st_oehme's post在Gradle論壇上把我帶到了正確的軌道。

我沒有安裝Gradle STS的Eclipse,所以我不能完全告訴你你要做什麼來調用任務選擇器而不是單個任務。也許別人可以補充說...