2016-05-13 57 views
1

我正在使用Gradle 2.12。在我的構建文件中,我配置每個模塊應該在清單中放置額外的信息。我這樣做:僅當清單更改時阻止執行jar任務

tasks.withType(Jar) { 
    manifest { 
     attributes(
       'Build-By': buildBy, 
       'Build-JDK': buildJdk, 
       'Build-Time-ISO-8601': buildTime_ISO_8601, 
       'Build-SCM-Info': buildScmInfo 
     ) 
    } 

變量在構建開始時初始化一次。

這工作正常,有一個缺點:它會導致jar任務總是被調用,因爲它發現它的'輸入'已更改,並且所有依賴於jar-ed的模塊都會重新編譯,這是不必要的。例如,對於項目結構:

A,B依賴於A,C依賴於A

當第二時間沒有任何更改代碼被執行的生成時,A不是編譯,而是一種新的罐是因爲這個原因,B和C需要重新編譯,因爲它們的依賴性發生了變化。

這怎麼解決?

回答

1

您可以嘗試將清單規範移出配置階段(通過在doFirst閉包中聲明它),以使Gradle查找默認清單文件中的更改,該清單文件中沒有任何更改。類似這樣的:

tasks.withType(Jar) { 
    doFirst { 
    manifest { 
     attributes \ 
     'Build-By': buildBy, 
     'Build-JDK': buildJdk, 
     'Build-Time-ISO-8601': buildTime_ISO_8601, 
     'Build-SCM-Info': buildScmInfo 
    } 
    } 
} 

在這種情況下,只有在執行jar任務時才應該更改Manifest內容。

+0

太簡單了,謝謝。 – wujek