2023 农历新年回顾
目录
引言
大家好!代表 Gradle 社区,祝大家农历新年快乐!2023 年对于 Gradle 构建工具来说是伟大的一年,发布了许多新功能和新举措。让我们回顾一下主要更新
- Gradle 8 基线,包含 7 个功能丰富的发布版本
- Kotlin DSL 成为 Gradle 的新默认
- 配置缓存、构建速度和可伸缩性改进
- 我们的第一个 Google 编程之夏和 Major League Hacking 参与
- Gradle Enterprise 更名为 Develocity,以及 Gradle 构建扫描增强
- 接下来是什么,声明式 Gradle 和通往 Gradle 9 的道路
Gradle 8 #
2023 年 2 月,Gradle 团队发布了 Gradle 8.0——一个新版本,将 Kotlin DSL 升级到 v1.8 并大大提高了其编译速度。Gradle 8.0 扩展了与 CodeNarc、PMD 和 Foojay Disco API 等 Java 工具的集成,用于工具链管理。这个主要版本有超过 40 位来自 Gradle 社区的代码贡献者。谢谢大家!
请参阅这篇博文,了解所有引入的功能和迁移指南的完整列表。在 8.0 发布之后,我们又进行了 6 次主要发布,带来了更多功能。除了下面列出的主要更新之外,您还可以在更新日志和我们的新闻稿中找到更多信息。
Kotlin DSL 是新默认 #
2023 年 4 月,Kotlin DSL 成为新 Gradle 项目的默认推荐选项。Gradle 的 Kotlin DSL 使用 Kotlin 语言,可以在 IntelliJ IDEA 和 Android Studio 中为构建编写提供完整的 IDE 辅助。这包括自动补全、智能内容辅助、快速访问文档、导航到源代码以及上下文感知重构。使用 Kotlin DSL,您可以以与处理生产和测试代码时相同的编辑体验来编辑您的构建逻辑。Groovy DSL 仍然完全支持,目前没有弃用计划。了解更多关于 Gradle 中的 Kotlin DSL。
鉴于 Gradle 中 Kotlin DSL 的大量努力和 2023 年的大规模采用,Gradle 作为白银会员加入了 Kotlin 基金会。请参阅此处的完整新闻稿。我们现在参与基金会运行的许多技术和外展计划。
配置缓存 #
在 Gradle 8.1(2023 年 4 月)中,我们还宣布了 Gradle 配置缓存的普遍可用性。此功能通过缓存配置阶段的结果并将其用于后续构建来显著提高构建性能。使用配置缓存,当没有任何影响构建配置(例如构建脚本)的更改时,Gradle 可以完全跳过配置阶段。请参阅 Mikhail Lopatkin 的这篇博文,了解配置缓存的工作原理。
Gradle 构建速度和可伸缩性 #
除了配置缓存,Gradle 构建工具还收到了许多更新,以提高大规模开发人员的速度,尤其是在年初的 8.2 和 8.3 版本中。我们增加了对持久化编译器守护进程的支持,以减少初始化时间。我们能够大幅降低内存消耗,同时减少构建时间
示例 Android Studio 项目的内存消耗降低
不同 Gradle 版本和 Bazel 中的构建时间
要了解有关性能改进的更多信息,请参阅这篇博文。
文档更新 #
您可能已经注意到,Gradle 用户手册今年进行了重大更新,包括但不限于内容刷新、新示例和导航体验。有许多新页面,包括针对技术和 IDE 的新解决方案页面。快来看看吧!
在最近的 Gradle 8.6 版本中,我们还为 Gradle 文档引入了深色主题,并且计划继续改进文档引擎并简化对文档的反馈和贡献。我们在 Gradle 社区 Slack 上有一个 #docs 频道,欢迎大家在那里讨论内容和文档体验。
我们的第一个 Google 编程之夏 #
2023 年夏天,Kotlin 基金会赞助了 Google 编程之夏 2023 的四个项目。其中一个项目是 Nikolai Vladimirov 的 Gradle Kotlin Script Support for Eclipse and BuildShip 项目!Gradle 作为 Kotlin 基金会的成员,以及 Donát Csikós 为该项目提供了指导支持。
该项目的最初目标是改善用户在 Eclipse IDE 中与 Gradle Kotlin 脚本的交互。该项目旨在实现几个关键功能,包括 Kotlin 脚本的语法高亮、内容辅助、跳转到定义、准确的语法错误诊断、签名帮助和悬停。Nikolai 通过实现基于现有 kotlin-language-server 项目的 Kotlin 脚本支持,创建了一个新系统来为每个构建脚本分离编译环境,成功交付了这些功能。阅读更多关于 Nikolai 和团队的这个项目。
2023 年,我们还赞助了两名 Major League Hacking 实习生,他们改进了文档,并在 Gradle 构建工具中进行了各种改进,包括更好的项目错误处理。详情请参阅博文。
敬请关注 2024 年 Google 编程之夏!我们已经向 Kotlin 基金会和 Eclipse 基金会提交了一些项目想法。
Gradle Enterprise 更名,欢迎 Develocity #
对于以前称为 Gradle Enterprise 的 Develocity 来说,这也是一个忙碌的一年。首先,Gradle Enterprise 更名为 Develocity,解决了许多社区成员报告的命名混淆问题。请参阅这篇博文,了解 Develocity 和 Gradle 构建扫描更新的完整列表。
Gradle 构建扫描 #
Gradle 构建扫描也有许多增强功能,现在它为 Gradle 提供了更多洞察。新版本可以
今年的测试改进也非常棒!特别是,我们在构建扫描中添加了不稳定测试的检测和细粒度测试分发可观察性。这些功能依赖于构建历史记录,因此需要一个功能齐全的 Develocity 实例。
声明式 Gradle 登场 #
今年,我们还宣布了 声明式 Gradle 项目。目标是提供一种优雅且可扩展的声明式构建语言,让开发人员能够清晰易懂地描述任何软件。Gradle 团队推动这个项目,并与 Google 和 JetBrains 密切合作,后者也正在运行一个名为 Amper 的实验性项目。请参阅 Piotr Jagielski 的这篇博文,了解更多关于该项目及其目标的信息。
以下是 Kotlin DSL 中声明式 Gradle 顶级定义可能的样子
// Clear type of software the project produces
javaLibrary {
// GroupID/ArtifactID/Version for publishing
publishedAs("my-group:my-lib:2.0")
// Common dependencies for all targets
dependencies {
api("some:lib:1.2")
implementation(projects.someLib)
}
// A library might have more than one target
targets {
// All information about specific targets is grouped here
java(11) { // Specific information about Java 11 target
dependencies {
implementation("some:back-port-lib:1.5")
}
}
java(21) // No additional info for the Java 21 target
}
tests {
unit {
// Dependencies for the unit tests
dependencies {
implementation("some:other-lib:1.4")
}
}
}
}
您可以在 gradle/declarative-prototypes 仓库中找到一些原型和实验性工作。正在进行中,欢迎任何反馈!请参阅 README 文件以获取讨论和反馈链接。
下一步是什么? #
在接下来的几个月里,我们的主要优先事项仍然是改进 Gradle 用户的开发体验,特别是声明式 Gradle,并改进错误报告,这将有助于简化 Gradle 8.x 中引入的更严格的任务依赖管理。我们还计划提供更好的项目隔离,扩展配置缓存并提高性能,特别是对于 Android Studio 和 IntelliJ IDEA 项目的同步。
2月6日,Louis Jacomet,Gradle的首席软件工程师和支持团队负责人,在Jfokus上发表了关于通往Gradle 9的道路以及我们对可伸缩性和可理解性的关注的演讲。Louis强调了以下几点
- 持续投入配置缓存
- 即将推出的隔离项目功能
- 更高级别的软件项目建模
- 构建用户和作者的关注点分离
这些项目中的许多都已在 Gradle 构建工具公共路线图上,您可以在那里找到信息和链接。我们将在接下来的新闻通讯中继续发布 Gradle 9 演进的更新。
您可以在此处找到 Louis 的幻灯片。视频录制稍后将在 Jfokus 页面和 YouTube 频道上发布。我们还计划很快在 Gradle 博客上发布文本版本。敬请期待!
我如何参与? #
如果您想分享反馈或加入任何这些计划,请加入我们的社区 Slack 频道!我们的 GitHub 问题和社区论坛也 24/7 开放。
查看 Gradle 构建工具公共路线图,了解未来版本即将推出的更多信息!
祝大家新年“Gradle”!