与 Louis Jacomet 一起迈向 Gradle 9
在 Devoxx France,我们与 Gradle Inc. 的技术主管 Louis Jacomet 坐下来进行了交谈。Louis 领导 Gradle 构建工具支持团队并协调发布,因此您经常可以在 GitHub 问题中看到他活跃的身影,并在 Gradle 会议上发言。让我们深入了解 Louis 关于即将发布的 Gradle 9 版本的分享!
Devoxx FR 的繁忙的一天
路易斯在 Devoxx FR 的周五日程排得满满当当,安排了 4 个小时的演讲。他与 Apache Maven 社区的埃尔维·布特米 (Hervé Boutemy) 共同进行了一场关于如何应对依赖管理迷宫的 1 小时演讲。他还与同事保罗·梅林 (Paul Merlin) 进行了单独讨论,主题是 Gradle 9 的即将发布的功能。
为如此多的演讲做准备并非易事。正如路易斯所说:思考你想说的话,组织它,准备一些酷炫的演示,并让它对观众来说有趣。是的,这是一项工作。 在会议上,Maven 和 Gradle 的人员共同分享了关于这两个系统中依赖管理的技巧和最佳实践。请查看路易斯和埃尔维·布特米 (Hervé Boutemy) 的演讲 这里(法语)。
Gradle 9 的关键领域
那么,我们可以在 Gradle 9 中期待什么呢?路易斯概述了他们在这个 Gradle 的下一个主要版本中关注的一些关键领域。
- 🚀 性能
- 💡 可理解性
- 🐘 支持现代 Java 和 Kotlin 版本
配置缓存改进
一个主要重点是继续进行配置缓存的工作,该缓存已在 Gradle 8.1 中标记为稳定。在 Gradle 9.0 中,配置缓存将成为首选的执行模式,关闭它将被弃用。这意味着每个构建都应该使用配置缓存功能,从而加快配置阶段,并使构建整体速度更快。
Gradle 配置是构建的重要组成部分,因此配置缓存改进至关重要。
但是,这需要对内部 Gradle 插件进行大量努力,并适应并非总是兼容的用例。对于社区插件来说尤其如此。Gradle 团队将继续与社区在这方面进行合作。
有一个 GitHub 问题,其中列出了已知兼容插件和兼容性问题,包括所有最流行的插件。路易斯鼓励社区查看它,如果你的最爱插件不兼容,请提及它。
隔离项目以实现更快的配置
如果命中缓存,配置缓存非常棒,但如果你没有命中,你仍然需要经历配置阶段。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 冠军一起被重点介绍。照片由 钱进 拍摄
通常,Gradle 无法在 Gradle 重大升级之外对 Kotlin 进行重大升级,因为它会影响兼容性。因此,Kotlin 2.0 将与 Gradle 9 一起发布。我们已经拥有支持 Kotlin 2.0 的实验性构建,因此夜间构建可能会更早提供。
延迟 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 的插件透明地与提供者 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 食谱
任何与文档相关的贡献和报告都非常受欢迎!
总结
听到 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/