Gradle 正在不断开发。如生命周期终止支持部分所述,定期且频繁地(大约每六周)提供新版本。

持续改进与频繁交付相结合,可以让新功能尽早提供给用户。早期用户提供了宝贵的反馈,这些反馈已纳入开发过程。

定期将新功能交付给用户是 Gradle 平台的核心价值。

同时,API 和功能稳定性也受到非常重视,并被视为 Gradle 平台的核心价值。设计选择和自动化测试被设计到开发过程中,并由向后兼容性部分正式化。

Gradle功能生命周期旨在满足这些目标。它还向 Gradle 用户传达功能的状态。在此上下文中,术语“功能”通常指的是 API 或 DSL 方法或属性,但它不限于此定义。命令行参数和执行模式(例如构建守护进程)是其他功能的两个示例。

特征状态

功能可以处于以下四种状态之一:

1. 内部

内部功能不是为公共使用而设计的,仅供 Gradle 本身使用。它们可以随时以任何方式更改,恕不另行通知。因此,我们建议避免使用此类功能。 内部功能未记录。如果它出现在本用户手册、DSL 参考或 API 参考中,则该功能不是内部功能。

内部功能可能会演变成公共功能。

2. 孵化

功能在孵化状态下引入,以便在公开之前将现实世界的反馈纳入功能中。它还为愿意测试未来潜在变化的用户提供了早期访问权限。

处于孵化状态的功能可能会在未来的 Gradle 版本中发生变化,直到它不再处于孵化状态。 Gradle 版本的孵化功能的更改将在该版本的发行说明中突出显示。新功能的孵化期根据功能的范围、复杂性和性质而有所不同。

指出了孵化的特征。在源代码中,所有正在孵化的方法/属性/类都带有incubating注释。这导致它们在 DSL 和 API 参考中具有特殊标记。

如果本用户手册中讨论了孵化功能,则将明确表示该功能处于孵化状态。

功能预览 API

功能预览 API 允许通过添加设置文件来激活某些孵化功能。各个预览功能将在发行说明中公布。enableFeaturePreview('FEATURE')

孵化功能升级为公开或删除时,它们的功能预览标志将变得过时、无效,应从设置文件中删除。

3. 公开

非内部功能的默认状态是public。用户手册、DSL 参考或 API 参考中记录的任何未明确表示正在孵化弃用的内容都被视为公开的。据说这些功能正在从孵化状态向公众推广。每个版本的发行说明表明该版本正在推广哪些先前孵化的功能。

公共功能在未经过弃用的情况下永远不会被删除或故意更改。所有公共功能均受向后兼容性政策的约束。

4. 已弃用

由于 Gradle 的自然演变,某些功能可能会被替换或变得无关紧要。这些功能最终将在被弃用后从 Gradle 中删除。已弃用的功能可能会变得过时,直到根据向后兼容性策略最终将其删除。

已弃用的功能已表明如此。在源代码中,所有不推荐使用的方法/属性/类都带有“@java.lang.Deprecated”注释,这反映在 DSL 和 API 参考中。在大多数情况下,已弃用的元素有替代品,这将在文档中进行描述。使用已弃用的功能将导致 Gradle 输出中出现运行时警告。

应避免使用已弃用的功能。每个版本的发行说明都会指出该版本弃用的任何功能。

向后兼容政策

Gradle 提供跨主要版本(例如, 、 等)的向后1.x兼容性2.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),并且该发行版将不会收到任何新的修复。