持續建置讓您在檔案輸入變更時自動重新執行所要求的任務。您可以使用 -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 報告的變更檔案清單,找出任務。在找出每次建置期間變更的檔案後,您應該尋找具有該檔案作為輸入的任務。在某些情況下,這可能是很明顯的(例如,使用 compileJava 編譯 Java 檔案)。在其他情況下,您可以使用 --info 記錄,找出因為已識別的檔案而過期的任務。