持續建置允許您在檔案輸入變更時自動重新執行請求的任務。您可以使用 -t
或 --continuous
命令列選項,在此模式下執行建置。
例如,您可以透過執行以下命令,持續執行 test
任務和所有相依任務
$ gradle test --continuous
當來源或測試的變更影響請求的任務時,Gradle 的行為會如同您執行 gradle test
一樣。這表示不相關的變更(例如建置腳本的變更)不會觸發重新建置。若要納入建置邏輯變更,必須手動重新啟動持續建置。
持續建置使用 檔案系統監看 來偵測輸入的變更。如果檔案系統監看在您的系統上無法運作,則持續建置也無法運作。特別是,使用 --no-daemon
時,持續建置無法運作。
當 Gradle 偵測到輸入的變更時,不會立即觸發建置。而是會等待一段時間(靜默期),直到不再偵測到其他變更。您可以透過 Gradle 屬性 org.gradle.continuous.quietperiod
以毫秒為單位配置靜默期。
終止持續建置
如果 Gradle 連接到互動式輸入來源(例如終端機),則可以按下 CTRL-D
退出持續建置(在 Microsoft Windows 上,在 CTRL-D
之後也需要按下 ENTER
或 RETURN
)。
如果 Gradle 未連接到互動式輸入來源(例如作為腳本的一部分執行),則必須終止建置程序(例如使用 kill
命令或類似命令)。
如果透過 Tooling API 執行建置,則可以使用 Tooling API 的取消機制取消建置。
限制
在某些情況下,持續建置可能無法偵測到輸入的變更。
建立輸入目錄
有時,由於檔案系統監看的工作方式,建立先前遺失的輸入目錄不會觸發建置。例如,建立 src/main/java
目錄可能不會觸發建置。同樣地,如果輸入是 篩選的檔案樹狀結構 且沒有檔案符合篩選條件,則建立符合條件的檔案可能不會觸發建置。
專案目錄外部檔案的變更
Gradle 僅監看專案目錄內檔案的變更。專案目錄外部檔案的變更將不會被偵測到,並且不會觸發建置。
建置循環
Gradle 在任務執行之前開始監看變更。如果任務在執行時修改了自己的輸入,Gradle 將偵測到變更並觸發新的建置。如果每次任務執行時,輸入都會再次修改,則會再次觸發建置。這並非持續建置獨有。修改自身輸入的任務在沒有持續建置的情況下「正常」執行時,永遠不會被視為是最新的。
如果您的建置進入像這樣的建置循環,您可以透過查看 Gradle 回報變更的檔案列表來追蹤任務。在識別出每次建置期間變更的檔案後,您應該尋找將該檔案作為輸入的任務。在某些情況下,這可能很明顯(例如,Java 檔案使用 compileJava
編譯)。在其他情況下,您可以使用 --info
日誌記錄來尋找因識別出的檔案而過期的任務。
符號連結的變更
一般而言,Gradle 不會偵測到符號連結或透過符號連結參考的檔案的變更。
建置邏輯的變更不被考慮
目前的實作不會在後續建置中重新計算建置模型。這表示任務配置的變更,或對建置模型的任何其他變更,實際上都會被忽略。