持續建置允許您在檔案輸入變更時自動重新執行請求的任務。您可以使用 -t--continuous 命令列選項,在此模式下執行建置。

例如,您可以透過執行以下命令,持續執行 test 任務和所有相依任務

$ gradle test --continuous

當來源或測試的變更影響請求的任務時,Gradle 的行為會如同您執行 gradle test 一樣。這表示不相關的變更(例如建置腳本的變更)不會觸發重新建置。若要納入建置邏輯變更,必須手動重新啟動持續建置。

持續建置使用 檔案系統監看 來偵測輸入的變更。如果檔案系統監看在您的系統上無法運作,則持續建置也無法運作。特別是,使用 --no-daemon 時,持續建置無法運作。

當 Gradle 偵測到輸入的變更時,不會立即觸發建置。而是會等待一段時間(靜默期),直到不再偵測到其他變更。您可以透過 Gradle 屬性 org.gradle.continuous.quietperiod 以毫秒為單位配置靜默期。

終止持續建置

如果 Gradle 連接到互動式輸入來源(例如終端機),則可以按下 CTRL-D 退出持續建置(在 Microsoft Windows 上,在 CTRL-D 之後也需要按下 ENTERRETURN)。

如果 Gradle 未連接到互動式輸入來源(例如作為腳本的一部分執行),則必須終止建置程序(例如使用 kill 命令或類似命令)。

如果透過 Tooling API 執行建置,則可以使用 Tooling API 的取消機制取消建置。

限制

在某些情況下,持續建置可能無法偵測到輸入的變更。

建立輸入目錄

有時,由於檔案系統監看的工作方式,建立先前遺失的輸入目錄不會觸發建置。例如,建立 src/main/java 目錄可能不會觸發建置。同樣地,如果輸入是 篩選的檔案樹狀結構 且沒有檔案符合篩選條件,則建立符合條件的檔案可能不會觸發建置。

未追蹤任務的輸入

變更 未追蹤任務 或沒有輸出的任務的輸入可能不會觸發建置。

專案目錄外部檔案的變更

Gradle 僅監看專案目錄內檔案的變更。專案目錄外部檔案的變更將不會被偵測到,並且不會觸發建置。

建置循環

Gradle 在任務執行之前開始監看變更。如果任務在執行時修改了自己的輸入,Gradle 將偵測到變更並觸發新的建置。如果每次任務執行時,輸入都會再次修改,則會再次觸發建置。這並非持續建置獨有。修改自身輸入的任務在沒有持續建置的情況下「正常」執行時,永遠不會被視為是最新的。

如果您的建置進入像這樣的建置循環,您可以透過查看 Gradle 回報變更的檔案列表來追蹤任務。在識別出每次建置期間變更的檔案後,您應該尋找將該檔案作為輸入的任務。在某些情況下,這可能很明顯(例如,Java 檔案使用 compileJava 編譯)。在其他情況下,您可以使用 --info 日誌記錄來尋找因識別出的檔案而過期的任務。

一般而言,Gradle 不會偵測到符號連結或透過符號連結參考的檔案的變更。

建置邏輯的變更不被考慮

目前的實作不會在後續建置中重新計算建置模型。這表示任務配置的變更,或對建置模型的任何其他變更,實際上都會被忽略。