2013-07-03 87 views
11

用Gradle構建我的最終輸出文件後,我想做2件事。更新本地version.properties文件並將最終輸出最終複製到某個特定目錄進行歸檔。假設我已經實現了2種方法,它們完全符合我剛剛描述的方法,即updateVersionProperties()archiveOutputFile()更好地使用Gradle中的任務依賴關係或task.doLast?

我知道知道什麼是應該做最好的辦法......

備選方案A:

assembleRelease.doLast { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

備選方案B:

task myBuildTask(dependsOn: assembleRelease) << { 
    updateVersionProperties() 
    archiveOutputFile() 
} 

在這裏,我會打電話myBuildTask而不是assembleRelease如替代方案A中的那樣。

哪一個是推薦的方法,爲什麼?相對於另一個有什麼優勢嗎?請稍後澄清... :)

回答

13

只要您可以,將新活動建模爲單獨的任務。 (在你的情況,你可以添加更多的任務。)這樣做有很多好處:

  • 更好的反饋哪個活動正在執行或未能
  • 能力申報任務的輸入和輸出(收穫所有是來自這個)
  • 能夠複用現有的任務類型
  • 更多可能性搖籃並行
  • 執行任務等等
好處

有時候很難將活動建模爲一項單獨的任務。 (一個例子是當需要後處理現有任務的輸出時,在一個單獨的任務中執行此操作會導致在後續運行中原始任務永遠不會是up-to-date)。只有這樣,才能將活動附加到現有的任務與doLast

+1

你如何建議創建這些任務的依賴關係?我想要一個單獨的任務來組裝整個項目(基本上是「替換」assembleRelease),並且這兩個任務必須在成功**執行'assembleRelease'後執行**。在他們之間,這個命令並沒有真正的相關性。 –

+6

'myBuildTask.dependsOn(updateVersionProperties,archiveOutputFile); updateVersionProperties.dependsOn(assembleRelease); archiveOutputFile.dependsOn(assembleRelease)' –