configuration-on-demand 嘗試僅設定與所要求任務相關的專案,亦即,它只評估參與建置的專案建置指令碼檔案。如此一來,大型多專案建置的設定時間便可縮短。

configuration-on-demand 功能為孵化中,因此僅保證部分建置能正確運作。此功能適用於解耦的多專案建置。

在 configuration-on-demand 模式中,專案設定如下

  • 根目錄專案總是會設定。

  • 執行建置的目錄中的專案也會設定,但僅在 Gradle 在沒有任何任務的情況下執行時。
    如此一來,當專案依需求設定時,預設任務才能正確運作。

  • 支援標準專案相依性,並設定相關專案。
    如果專案 A 對專案 B 有編譯相依性,則建置 A 會導致兩個專案的設定。

  • 透過任務路徑宣告的任務相依性受到支援,並導致相關專案被設定。
    範例:someTask.dependsOn(":some-other-project:someOtherTask")

  • 透過命令列(或工具 API)從任務路徑要求的任務會導致相關專案被設定。
    例如,建置 project-a:project-b:someTask 會導致 project-b 的設定。

啟用 configuration-on-demand

您可以使用 --configure-on-demand 旗標或將 org.gradle.configureondemand=true 加入 gradle.properties 檔案來啟用 on-demand 設定。

若要針對每次建置執行 on-demand 設定,請參閱 Gradle 屬性

若要針對特定建置設定 on-demand 設定,請參閱 命令列效能導向選項

解耦的專案

Gradle 允許專案在設定和執行階段存取彼此的設定和任務。雖然這種彈性賦予建置作者權限,但它限制了 Gradle 執行最佳化作業的能力,例如 平行專案建置on-demand 設定

當專案僅透過宣告的相依性和任務相依性進行互動時,它們就被視為解耦。直接修改或讀取另一個專案的物件會在專案之間建立耦合。在設定期間的耦合可能會在使用「on-demand 設定」時導致有瑕疵的建置結果,而執行期間的耦合可能會影響平行執行。

耦合的一個常見來源是設定注入,例如在建置指令碼中使用 allprojects{}subprojects{}

若要避免耦合問題,建議您

  • 避免參照其他子專案的建置指令碼,並優先從根專案進行跨設定。

  • 避免在執行期間動態變更其他專案的設定。

隨著 Gradle 的演進,它旨在提供能利用解耦專案的功能,同時提供常見使用案例的解決方案,例如注入組態,而不會引入耦合。

平行專案

Gradle 的平行執行功能最佳化 CPU 使用率,透過同時執行來自不同專案的任務來加速建置。

若要啟用平行執行,請使用 --parallel 命令列引數或組態您的建置環境。Gradle 會根據 CPU 核心自動判斷最佳平行執行緒數目。

在平行執行期間,每個工作執行緒會獨佔處理特定專案。會遵守任務相依性,工作執行緒會優先處理上游任務。不過,任務可能不會像順序模式一樣按字母順序執行。正確宣告任務相依性及輸入/輸出至關重要,以避免排序問題。