隨需配置嘗試僅配置請求任務的相關專案,即僅評估參與建置的專案的建置腳本檔案。 這樣可以減少大型多專案建置的配置時間。

隨需配置功能尚在實驗階段,因此僅保證某些建置可以正常運作。 此功能對於解耦多專案建置效果良好。

在隨需配置模式下,專案配置方式如下

  • 根專案始終會被配置。

  • 執行建置所在目錄中的專案也會被配置,但僅當執行 Gradle 時未帶任何任務時才會配置。
    這樣一來,當專案隨需配置時,預設任務的行為就會正確。

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

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

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

啟用 configuration-on-demand

您可以使用 --configure-on-demand 標記啟用隨需配置,或將 org.gradle.configureondemand=true 新增至 gradle.properties 檔案。

若要針對每次建置執行都進行隨需配置,請參閱Gradle 屬性

若要針對給定建置進行隨需配置,請參閱命令列效能導向選項

解耦專案

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

當專案僅透過宣告的相依性和任務相依性進行互動時,即視為解耦專案。 任何直接修改或讀取另一個專案的物件都會在專案之間建立耦合。 配置期間的耦合可能會在使用「隨需配置」時導致建置結果出現缺陷,而執行期間的耦合可能會影響平行執行。

配置注入是耦合的常見來源之一,例如在建置腳本中使用 allprojects{}subprojects{}

為了避免耦合問題,建議

  • 避免參考其他子專案的建置腳本,並優先從根專案進行跨專案配置

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

隨著 Gradle 的發展,其目標是提供可利用解耦專案的功能,同時為配置注入等常見用例提供解決方案,而不會引入耦合。

平行專案

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

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

在平行執行期間,每個 worker 獨佔處理一個特定專案。 任務相依性會受到尊重,worker 會優先處理上游任務。 但是,任務可能不會像循序模式那樣按字母順序執行。 正確宣告任務相依性和輸入/輸出以避免排序問題至關重要。