Gradle 正在持续开发中。新版本会定期且频繁地交付(大约每六周一次),如关于终止生命周期支持的章节中所述。
持续改进与频繁交付相结合,使新功能能够尽早提供给用户。早期用户提供宝贵的反馈,这些反馈会融入到开发过程中。
定期将新功能交付到用户手中是 Gradle 平台的核心价值。
与此同时,API 和功能的稳定性也受到高度重视,并被认为是 Gradle 平台的核心价值。设计选择和自动化测试被纳入开发过程,并通过关于向后兼容性的章节加以规范化。
Gradle功能生命周期旨在实现这些目标。它还向 Gradle 用户传达了功能的状态。在此上下文中,术语功能通常指 API 或 DSL 方法或属性,但不限于此定义。命令行参数和执行模式(例如,Build Daemon)是其他功能的两个示例。
1. 内部
内部功能并非为公开使用而设计,仅供 Gradle 自身使用。它们可能随时以任何方式更改,恕不另行通知。因此,我们建议避免使用此类功能。内部功能不作文档记录。如果它出现在本用户手册、DSL 参考或 API 参考中,则该功能不是内部功能。
内部功能可能会演变为公开功能。
2. 孵化中
孵化中状态的功能是为了在功能公开之前,允许将真实世界的反馈融入其中。它还让愿意测试潜在未来变更的用户尽早访问。
处于孵化中状态的功能在未来的 Gradle 版本中可能会发生更改,直到它不再是孵化中状态为止。针对 Gradle 版本的孵化中功能所做的更改将在该版本的发行说明中突出显示。新功能的孵化期长短不一,具体取决于功能的范围、复杂性和性质。
孵化中的功能会有所指示。在源代码中,所有孵化中的方法/属性/类都使用incubating进行注解。这会在 DSL 和 API 参考中为它们生成一个特殊标记。
如果本用户手册中讨论了孵化中的功能,则会明确说明其处于孵化中状态。
功能预览 API
功能预览 API 允许通过在settings文件中添加 enableFeaturePreview('FEATURE')
来激活某些孵化中的功能。各个预览功能将在发行说明中公布。
当孵化中的功能被提升为公开或移除时,针对它们的功能预览标志将变得过时、无效,并且应从 settings 文件中移除。
3. 公开
非内部功能的默认状态是公开。用户手册、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),并且该发行版本系列将不会收到任何新的修复。