Gradle 正在持續開發中。新版本會定期頻繁地發布(大約每六週一次),如 結束支援部分 所述。

持續改善加上頻繁發布,讓使用者可以提早使用新功能。早期使用者會提供寶貴的回饋,並納入開發流程中。

定期讓使用者使用新功能,是 Gradle 平台的核心價值。

同時,API 和功能穩定性非常重要,並被視為 Gradle 平台的核心價值。設計選擇和自動化測試會設計到開發流程中,並由 向後相容性部分 正式化。

Gradle 功能生命週期 的設計是為了達成這些目標。它也會傳達 Gradle 使用者功能的狀態。在此脈絡中,功能 通常是指 API 或 DSL 方法或屬性,但並不侷限於此定義。命令列引數和執行模式(例如建置守護程式)是其他功能的兩個範例。

功能狀態

功能可以處於四種狀態之一

1. 內部

內部功能並非設計供公開使用,僅供 Gradle 本身使用。這些功能隨時可能以任何方式變更,恕不另行通知。因此,我們建議避免使用此類功能。內部功能未經文件記載。如果出現在本使用者手冊、DSL 參考或 API 參考中,則該功能並非內部功能。

內部功能可能會演變成公開功能。

2. 孵化中

功能會在孵化中狀態中推出,以便在公開功能之前納入實際回饋。這也讓願意測試潛在未來變更的使用者可以搶先存取。

孵化中狀態的功能可能會在未來的 Gradle 版本中變更,直到不再處於孵化中狀態為止。孵化中功能在 Gradle 發行版本中的變更會在該發行的發行說明中標示出來。新功能的孵化期間會根據功能的範圍、複雜度和性質而有所不同。

孵化中的功能會標示出來。在原始碼中,所有孵化中的方法/屬性/類別都會加上 incubating 註解。這會在 DSL 和 API 參考中為它們加上特殊標記。

如果本使用者手冊中討論到孵化中功能,會明確說明其處於孵化中狀態。

功能預覽 API

功能預覽 API 允許透過在設定檔案中新增 enableFeaturePreview('FEATURE') 來啟用某些孵化中功能。個別預覽功能會在發行說明中公告。

孵化中功能升級為公開或移除時,其功能預覽旗標會過時、失效,且應從設定檔案中移除。

3. 公開

非內部功能的預設狀態為公開。使用者手冊、DSL 參考或 API 參考中記載的任何內容,如果未明確說明處於孵化中已棄用狀態,則視為公開。功能會從孵化中狀態升級公開。每個發行的發行說明會指出哪些先前孵化中的功能已透過該發行升級。

公開功能絕不會在未經棄用的情況下移除或故意變更。所有公開功能均受後向相容性政策約束。

4. 已棄用

由於 Gradle 的自然演進,某些功能可能會被取代或變得不相關。此類功能最終會在棄用後從 Gradle 中移除。已棄用功能可能會過時,直到最後根據後向相容性政策移除為止。

已棄用功能會標示為已棄用。在原始碼中,所有已棄用的方法/屬性/類別都加上「@java.lang.Deprecated」註解,這會反映在 DSL 和 API 參考中。在大多數情況下,已棄用元素都會有替代品,文件會說明替代品。使用已棄用功能會在 Gradle 的輸出中產生執行時期警告。

應避免使用已棄用功能。每次發行的版本說明會指出該版本棄用的任何功能。

後向相容性政策

Gradle 在主要版本之間提供後向相容性(例如,1.x2.x 等)。一旦公開功能在 Gradle 發行版中推出,除非已棄用,否則它將無限期保留。一旦棄用,它可能會在下一主要版本中移除。已棄用功能可能會在主要版本之間獲得支援,但並非保證。

發行版結束支援政策

每天都會建立一個新的 Gradle 夜間建置。

這包含當天透過 Gradle 廣泛的持續整合測試所做的所有變更。夜間建置可能包含新的變更,這些變更可能穩定或不穩定。

Gradle 團隊會為每個次要或主要版本建立一個稱為候選版本 (RC) 的預發行版。如果在短時間內(通常為一週)未發現問題,候選版本會升級為一般可用性 (GA) 版本。如果在候選版本中發現回歸,則會建立新的 RC 版本,並重複此程序。候選版本會在發行視窗開啟期間獲得支援,但並非供生產使用。在 RC 階段,非常歡迎回報錯誤。

Gradle 團隊可能會建立額外的修補程式版本,以取代最終版本,原因是重大錯誤修正或回歸。例如,Gradle 5.2.1 取代 Gradle 5.2 版本。

一旦建立候選版本,所有功能開發都會移至最新主要版本的下一版本。因此,每個 Gradle 次要版本都會導致同一主要版本中的前一個次要版本成為結束支援 (EOL)。EOL 版本不會收到錯誤修正或功能回傳。

對於主要版本,Gradle 會將重大修正和安全性修正回傳到前一主要版本中的最後一個次要版本。例如,當 Gradle 7 是最新主要版本時,6.x 系列中會發行幾個版本,包括 Gradle 6.9(和後續版本)。

因此,每個 Gradle 主要版本會導致

  • 前一個主要版本僅供維護。它只會收到重大錯誤修復和安全性修復。

  • 前一個主要版本之前的主要版本將進入生命週期結束 (EOL),該版本線不會收到任何新修復。