2023 年农历回顾

大家好!代表 Gradle 社区,祝大家新年快乐!2023 年对于 Gradle 构建工具来说是伟大的一年,发布了许多新功能和计划。让我们回顾一下关键更新

  • Gradle 8 基线,包含 7 个功能丰富的版本
  • Kotlin DSL 成为 Gradle 的新默认值
  • 配置缓存、构建速度和可扩展性改进
  • 我们首次参与 Google Summer of Code 和 Major League Hacking
  • Gradle Enterprise 更名为 Develocity,以及 Gradle 构建扫描增强功能
  • 下一步是什么,声明式 Gradle 和通往 Gradle 9 的道路

2023 Lunar Year in Gradle

Gradle 8

2023 年 2 月,Gradle 团队宣布了 Gradle 8.0 - 一个将 Kotlin DSL 升级到 v1.8 并极大地提高其编译速度的新版本。Gradle 8.0 扩展了与 Java 工具(如 CodeNarc、PMD 和 Foojay Disco API)的集成,用于工具链管理。这个主要版本有来自 Gradle 社区的 40 多位代码贡献者。感谢大家!

Gradle 8.0 release

查看 这篇博客文章,了解已引入功能的完整列表和迁移指南。在 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。

Kotlin DSL is Now the Default for New Gradle Builds

在 Gradle 中围绕 Kotlin DSL 的努力以及 2023 年其大规模采用达到顶峰,Gradle 加入 Kotlin 基金会 成为银牌会员。查看完整的新闻稿 这里。我们现在参与了基金会运营的许多技术和外联计划。

New members of the Kotlin Foundation in 2023

配置缓存

在 Gradle 8.1(2023 年 4 月)中,我们还宣布了 Gradle 配置缓存 的普遍可用性。此功能通过缓存配置阶段的结果并在后续构建中重复使用该结果来显着提高构建性能。使用配置缓存,当影响构建配置的任何内容(例如构建脚本)没有更改时,Gradle 可以完全跳过配置阶段。查看此 博客文章,由 Mikhail Lopatkin 撰写,以了解有关配置缓存工作原理的更多信息。

Gradle Configuration Cache in Action

Gradle 构建速度和可扩展性

除了配置缓存之外,Gradle 构建工具还收到了许多更新,以提高大规模的开发人员速度,尤其是在年初的 8.2 和 8.3 版本中。我们添加了对 持久编译守护进程 的支持,以减少初始化时间。我们能够大幅减少内存消耗,同时缩短构建时间

示例 Android Studio 项目的内存消耗减少

Memory consumption reductions on a sample Android Studio project

不同 Gradle 版本和 Bazel 的构建时间

Build times in different Gradle versions and Bazel

要了解有关性能改进的更多信息,请查看此 博客文章

文档更新

您可能已经注意到,Gradle 用户手册 今年进行了重大更新,包括但不限于内容更新、新示例和导航体验。 许多新页面,包括针对技术和 IDE 的新解决方案页面。 看看吧!

Gradle User Manual - new documentation page

在最近的 Gradle 8.6 版本中,我们还引入了 Gradle 文档的深色主题,并且计划继续改进文档引擎并简化对文档的反馈和贡献。 我们在 Gradle 社区 Slack 上有一个 #docs 频道,欢迎任何人在那里讨论内容和文档体验。

我们的第一个 Google Summer of Code

在 2023 年夏季,Kotlin 基金会为 Google Summer of Code 2023 赞助了四个项目。 由 Nikolai Vladimirov 完成的 Gradle Kotlin 脚本支持 Eclipse 和 BuildShip 项目就是其中之一! Gradle(Kotlin 基金会成员)和 Donát Csikós 为该项目提供了指导支持。

该项目的最初目标是改善用户在 Eclipse IDE 中与 Gradle Kotlin 脚本的交互。 该项目旨在实现几个关键功能,包括 Kotlin 脚本的语法高亮、内容辅助、转到定义、对语法错误的准确诊断、签名帮助和悬停。 Nikolai 通过基于现有的 kotlin-language-server 项目实现对 Kotlin 脚本的支持,创建了一个新的系统来为每个构建脚本分离编译环境,成功地交付了这些功能。 阅读更多 关于 Nikolai 和团队的这个项目。

Syntax highlighting for .kts scripts in Eclipse IDE

在 2023 年,我们还赞助了两名 Major League Hacking 实习生,他们改进了文档并在 Gradle Build Tool 中进行了各种改进,包括对项目的错误处理进行了改进。 查看 博客文章 以获取详细信息。

敬请关注 Google Summer of Code 2024! 我们已向 Kotlin 基金会和 Eclipse 基金会提交了一些项目想法。

Gradle Enterprise 更名,欢迎 Develocity

对于 Develocity(以前称为 Gradle Enterprise),这也是忙碌的一年。 首先,Gradle Enterprise 更名为 **Develocity**,解决了许多社区成员报告的命名混淆问题。 查看 这篇博客文章 以获取 Develocity 和 Gradle Build Scan 更新的完整列表。

Develocity 2023 update

Gradle 构建扫描

Gradle Build Scan 中也有许多增强功能,现在它为 Gradle 提供了更多见解。 使用新版本,您可以

Gradle Build Scan

今年的测试改进也很棒!特别是,我们在构建扫描中添加了检测跨构建的易出错测试细粒度测试分布可观察性。这些功能依赖于构建历史记录,因此需要一个完整的 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 存储库中找到一些原型和实验性工作。正在进行中,任何反馈都欢迎!请参阅自述文件以获取讨论和反馈链接。

下一步是什么?

在接下来的几个月里,我们的主要优先事项仍然是改善 Gradle 用户的开发体验,特别是声明式 Gradle,以及改进错误报告,这将有助于简化 Gradle 8.x 中引入的更严格的任务依赖管理的缓解措施。我们还计划提供更好的项目隔离,扩展配置缓存并提高性能,特别是对于 Android Studio 和 IntelliJ IDEA 项目的同步。

2 月 6 日,Gradle 的首席软件工程师和支持团队负责人 Louis Jacomet 在 Jfokus 上谈到了通往 Gradle 9 的道路以及我们对可扩展性和可理解性的关注。Louis 强调了以下几点

  • 持续投资配置缓存
  • 即将推出的隔离项目功能
  • 软件项目的更高层次建模
  • 构建用户和作者的关注点分离

这些项目中的许多已经出现在Gradle Build Tool 公共路线图上,您可以在那里找到相关信息和链接。我们将在接下来的通讯中继续发布有关 Gradle 9 演变的更新。

您可以在此处找到 Louis 的幻灯片。视频录制将在稍后发布在Jfokus 页面和 YouTube 频道上。我们还计划尽快在 Gradle 博客上发布文本版本。敬请关注!

The Road to Gradle 9

我如何参与?

如果您想分享反馈或加入任何这些计划,请加入我们社区 Slack 频道!我们的 GitHub 问题和社区论坛也全天候开放。

查看 Gradle 构建工具的 公开路线图,了解即将发布的版本中的新功能!

祝您新年快乐!

讨论