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.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),并且该版本系列不会收到任何新修复。