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