Gradle 9 之路,对话 Louis Jacomet
简介
在 Devoxx France 大会上,我们与 Gradle 公司的技术主管 Louis Jacomet 进行了交流。Louis 领导 Gradle 构建工具支持团队并协调版本发布,因此您经常可以在 GitHub 问题和 Gradle 会议上看到他活跃的身影。让我们深入了解 Louis 分享的关于即将发布的 Gradle 9 版本的信息!
在 Devoxx FR 忙碌的一天 #
Louis 在 Devoxx FR 的星期五日程安排得很满,安排了 4 个小时的演讲。他与来自 Apache Maven 社区的 Hervé Boutemy 一起进行了一场关于驾驭依赖管理迷宫的会议,这是一个 1 小时的演讲。他还与他的同事 Paul Merlin 就 Gradle 9 中即将推出的功能进行了单独讨论。
一次准备这么多演讲并非易事。正如 Louis 所说:思考你想说什么,组织它,拥有酷炫的演示,并使其对观众有趣。是的,这很费力。在会议上,Maven 和 Gradle 的人员共同努力,分享关于两个系统中依赖管理技巧和最佳实践。请观看 Louis 和 Hervé Boutemy 的演讲 here(法语)。
Gradle 9 中的关键领域 #
那么,我们对 Gradle 9 有什么期望呢?Louis 概述了他们为 Gradle 的下一个主要版本关注的几个关键领域
- 🚀 性能
- 💡 可理解性
- 🐘 支持现代 Java 和 Kotlin 版本
配置缓存改进 #
一个主要的重点是继续配置缓存方面的工作,配置缓存已在 Gradle 8.1 中标记为稳定。在 Gradle 9.0 中,配置缓存将成为首选执行模式,并且禁用它将被弃用。这意味着每个构建都应该使用配置缓存功能,从而加快配置阶段并使构建总体上更快。
Gradle 配置是构建的重要组成部分,因此需要配置缓存改进。
然而,这需要内部 Gradle 插件的大量努力,并适应并非总是兼容的用例。对于社区插件尤其如此。Gradle 团队将继续与社区就此进行协作。
有一个 GitHub issue 包含已知兼容插件和兼容性问题的列表,包括所有最流行的插件。Louis 鼓励社区查看它,如果您的收藏插件不兼容,请提及它。
用于更快配置的隔离项目 #
如果您获得缓存命中,配置缓存非常棒,但如果您没有,您仍然必须经历配置阶段。Gradle 团队的下一步是 隔离项目。
由于 Gradle 的历史和可变模型,每当您进行更改时,实际上都必须重新运行整个配置。对于多模块构建来说,这可能是一个问题,即使某些模块没有更改。Android Studio 以其同步 Gradle 项目需要很长时间而闻名。
对于 隔离项目,目标是能够并行运行 Gradle 的配置阶段并增量缓存它。这将使 Gradle 能够在您修改构建逻辑时仅为受影响的项目重新运行配置阶段。
对于 Gradle 9,该团队计划发布一个孵化版本,供早期采用者试用。您还可以在孵化期间报告问题并请求支持其他模式。
Kotlin 2.0 集成 #
Gradle 团队希望将 Kotlin 2.0 集成到 Gradle 9 中,并利用 K2 编译器来加速 Kotlin 构建脚本的编译。Gradle 参与了 JetBrains 和 Kotlin 基金会组织的 Kotlin 2.0 早期访问计划。
Gradle 在 KotlinConf 开幕主题演讲中被强调为其他 Kotlin 2 EAP 冠军之一。照片由 Qian Jin 拍摄
通常,Gradle 无法在 Gradle 的主要升级之外进行 Kotlin 的主要升级,因为它会影响兼容性。因此 Kotlin 2.0 将随 Gradle 9 一起推出。我们已经有了支持 Kotlin 2.0 的实验性构建,因此 nightly 构建可能会更早可用。
延迟 API 和字节码转换 #
Gradle 一直在推广一组延迟 API。这些 API 旨在解决评估和执行顺序(如 Provider API 中所示),并允许延迟评估属性,使您能够在配置阶段配置依赖项并在执行期间获得正确的值。
interface Extension {
val description: Property<String>
}
// register "extension" with type Extension
extension {
// Using the set() method call
description.set("Hello Property")
// Using lazy property assignment
description = "Hello Property"
}
对于 Gradle 9,计划对新 API 进行重大迁移,确保现有插件仍然可以应用。其想法是在幕后使用字节码转换,允许以旧式 getter 和 setter 为目标的插件与 provider API 透明地工作。
到目前为止,Gradle 一直在逐个迁移属性,这涉及找到一个新名称,引入它,弃用旧名称,并最终在下一个主要版本中删除旧名称。这是一个漫长而具有破坏性的过程。借助 Gradle 9,该团队旨在进行最后一次重大更改,以简化此过程。由于其复杂性,是否可以为插件作者提供自动兼容性仍然不确定。
Java 版本支持 #
Gradle 旨在跟上新的 Java 版本。在 Gradle 8.7 中,您可以通过工具链机制使用 Java 22 来编译、运行和测试工具。但是,Gradle 依赖于 Groovy 和 Kotlin,它们也需要支持 Java 22。对 Java 22 的完全支持将在 Gradle 8.8 中提供。
对于 Java 23,Gradle 团队正在积极探索尽早提供支持的方法,理解用户可能希望尝试即将推出的 Java 版本的早期访问功能。鉴于当前的计划,Java 23 支持很可能在 9.0 版本中提供。
分享反馈 #
当被问及是否有任何技巧或建议要传达给 Gradle 用户时,Louis 强调了用户反馈的重要性
如果您在某个主题上遇到困难,您找不到正确的文档。请告诉我们。与一些其他的错误修复和功能请求相比,这通常更容易推进,并且可以帮助其他遇到相同挑战的人。
Gradle 团队已经启动了一些改进文档的举措
- 一个新的反馈表单已经实施,允许您立即提交 GitHub 问题。很快,您将能够直接从文档中编辑和提交拉取请求
- 文档更新速度更快,以便每个合并的拉取请求都将在当晚的当前版本中显示出来
- 主要的文档计划,包括新的 Gradle Cookbook
非常欢迎任何与文档相关的贡献和报告!
总结 #
听到 Gradle 9 中即将到来的所有改进和新功能,从配置缓存增强到隔离项目、Kotlin 2.0 集成、延迟 API 和更好的 Java 版本支持,真是令人兴奋。非常感谢 Louis 在 Devoxx FR 繁忙的日程中分享这些见解。我们期待尽快看到 Gradle 9 候选版本和功能。
要了解有关 Gradle 计划的更多信息,请查看 Gradle 构建工具路线图。除了 Gradle 9 之外,我们还有很多其他事情要做。
与往常一样,Gradle 社区的反馈和贡献是无价的。因此,请尝试新功能,报告任何问题,并让 Gradle 团队知道您是否需要记录某些内容。共同努力,我们可以使 Gradle 9 成为有史以来最好的版本!
参考资料 #
Louis 的演讲
- 演讲页面(法语):https://www.devoxx.fr/schedule/talk/?id=40282
- Build Propulsion Lab 访谈:https://www.youtube.com/watch?v=zCxXUKTSjdA
- Louis 在 Jfokus 上的视频:https://www.youtube.com/watch?v=uIq5X7Ty0_0
- 演示文稿幻灯片:https://jacomet.dev/devoxxfr-gradle9/