2015-10-27 102 views
1

使用Google protobuf-gradle插件,它可以根據多個原始文件輸入生成潛在的多個文件。在運行任務時,只能查看所有已輸出的文件,而不能事先確定輸出的內容。從Gradle任務中跟蹤(並刪除)輸出文件

當清理項目時,挑戰就來了。看起來Gradle會跟蹤輸出文件,可從AbstractTask.getOutputs().getPreviousFiles()訪問。這是Gradle的內部,所以我懷疑你可以依靠這個。如果你想刪除所有的輸出文件,最好的方法是什麼?

  1. 一種可能性是限制輸出文件夾到構建目錄,以便如果它被刪除,所有生成的文件將會消失。

  2. 另一種方法是在輸出目錄中創建一個清單,該清單將跟蹤所有創建的文件,然後知道要刪除的內容。

這裏有什麼建議?

回答

0

根據內部API不是一個好主意。這不是偶然的內部,但可以在沒有任何通知的情況下進行更改,因此破壞了構建。

較少出錯並且更容易實現的是將輸出重定向到project.buildDir。在這種情況下,一切都很簡單,這個文件夾將被刪除clean調用和文件將被刪除。

當談到創建清單時,我發現實現和維護以及更容易出錯的難度更大 - 您需要更好地瞭解gradle機制(可能並不像看起來那麼困難)來實現它正確的方式。我也沒有發現這個解決方案的任何優點。你有什麼?

所以,總結一下,改變輸出文件夾。

+0

如何處理輸出被刪除時的情況?對於IncrementalTask​​Inputs,您可能可以計算差異。否則,您需要始終刪除整個輸出目錄,然後重新填充整個目錄。有沒有可能做得更好? – brunobowden

+0

@brunobowden如果我能很好地理解它,那麼默認情況下它會被照顧。如果您註釋任務輸出,gradle會在失蹤時始終準備它們。 – Opal

+0

你是正確的@opal。我沒有解釋得很好。我正在考慮ATinput變化導致AToutput變化的時間。由於protobuf插件的限制,它不知道何時編輯ATinput可能導致AToutput消失。在這種情況下,它必須清除所有輸出,然後重新創建所有內容。 – brunobowden