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 的新 nightly 建置。

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

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),並且該發行版本系列將不會收到任何新的修復。