2015-03-13 55 views
23

爲什麼我要運行'gradle clean build'而不是'gradle build'?據我所知,gradle可以檢測源變化並在需要時更新最終的工件。那麼爲什麼我仍然需要「清潔」?爲什麼要運行'gradle clean'?

+1

爲了確保您得到的錯誤不是來自Gradle的錯誤索引。或者如果您添加了更改每個依賴項的新庫。 – Tschallacka 2015-03-13 09:31:43

+0

「gradel clean build」有助於刪除上次構建時生成的所有依賴關係,並從服務器獲取新的依賴關係並構建您的項目。謝謝 – Naitik 2015-03-13 09:32:53

+2

@Naitik,那不對。 – Opal 2015-03-13 09:41:51

回答

33

clean taskjava plugin定義,它只是刪除buildDir文件夾,從而清除所有內容,包括以前版本中不再相關的剩餘部分。不這樣做可能會導致不潔的構建,由於構建了以前構建產生的構件,可能會破壞構建。

作爲一個例子,假設您的版本包含多個失敗的測試,並且您認爲這些測試已過時,因此需要刪除。如果沒有清理測試結果(使用cleanTest任務)或完全構建(通過運行乾淨的任務),您將會遇到失敗的測試結果,從而導致構建失敗。類似的副作用也可能發生在從資源中刪除的資源/類中,但仍保留在未清理的構建文件夾中。

+0

感謝您的回答。我知道乾淨的是什麼,但我不知道什麼時候有用。你能否提供這樣一個例子,以便更好地理解?謝謝。 – 2015-03-13 11:41:23

+0

當然。假設您的版本包含多個失敗的測試,並且您認爲這些測試已過時,因此需要刪除。如果沒有清理測試結果(使用cleanTest任務)或完全構建(通過運行乾淨的任務),您將會遇到失敗的測試結果,從而導致構建失敗。類似的副作用也可能發生在從資源中刪除的資源/類中,但仍保留在未清理的構建文件夾中。 – 2015-03-13 12:03:32

+0

有道理。你可以編輯你的答案,包括這個例子,所以我可以標記爲正確的? – 2015-03-13 12:41:54

1

像buck這樣的其他構建工具會檢測到某些測試已被刪除,並且在沒有運行乾淨目標的需求時不會運行它們。我認爲這是Gradle的陷阱。

+0

這大多不準確,Gradle有輸入和輸出跟蹤,幾乎所有的任務都可以處理這種情況。 – mkobit 2016-10-26 02:35:32

相關問題