Kotlin DSL 现已成为新 Gradle 构建的默认选项

Gradle 的 Kotlin DSL 是在 2016 年 8 月 的 Gradle 构建工具 3.0 版本中引入的,并在 Gradle 5.0 中发布了 1.0 版本。从那时起,它越来越受欢迎,并且极大地改善了许多 Gradle 构建的编写体验。

Kotlin DSL 现已成为新 Gradle 构建的默认选择。这意味着,当使用 Gradle 创建新项目时,包括在 IntelliJ IDEA(从 2023.1 开始)和 Android Studio(从 Giraffe 开始),Kotlin DSL 是默认选项。对于现有项目或那些更喜欢使用 Groovy DSL 的用户,将继续支持 Groovy DSL。

在这篇文章中,我们将探讨 Kotlin DSL 的优势,以及为什么它正成为新 Gradle 构建的推荐选项。我们还将讨论一些计划在未来进行的改进,以使 Kotlin DSL 变得更好。

Kotlin DSL by default

关于 Kotlin DSL

Kotlin 是一种强大的语言,它提供了许多功能,使其非常适合创建 DSL。其静态类型系统、简洁且富有表现力的语法以及对函数式编程结构的支持,使其易于创建可读且可组合的 DSL。

用于 Gradle 的 Kotlin DSL 利用 Kotlin 语言,为 IntelliJ IDEA 和 Android Studio 中的构建创作提供完整的 IDE 辅助。这包括自动完成、智能内容辅助、快速访问文档、导航到源代码以及上下文感知重构。使用 Kotlin DSL,您可以使用与处理生产和测试代码时相同的编辑体验来编辑构建逻辑。

Gradle 将 Kotlin 语言功能与其功能相结合,提供了一种优雅且可扩展的声明式构建语言,使您可以清晰且易懂地表达任何构建。构建模型的动态添加元素,例如项目依赖项(当使用 版本目录)或多项目构建中的子项目名称,受益于静态类型和 IDE 辅助。Gradle 插件通过贡献在构建脚本中静态提供的扩展和任务来扩展 Kotlin DSL。

Kotlin DSL 作为新构建的默认值

由于 JetBrains、Google 和 Gradle 之间的协作努力,Kotlin DSL 达到了新的成熟度水平,现在已成为开发人员更有效率和更友好的工具。

许多可用性改进,包括对版本目录的完全支持,以及 IntelliJ IDEA 和 Android Studio 中更快的代码分析和自动完成,已交付。还有一个全新的 DSL 参考

从 Gradle 8.2 开始,使用 gradle init 创建新构建默认情况下会生成使用 Kotlin DSL 的 Gradle 构建。在 IntelliJ IDEA 2023.1 中,创建新的 Java 应用程序默认情况下会使用 Kotlin DSL。所有向导和模板在 Android Studio Giraffe 中默认使用 Kotlin DSL。

阅读 Gradle 文档时,您会注意到用户手册和示例首先展示 Kotlin DSL。此外,Kotlin Gradle 插件和其他 Kotlin 和 JetBrains 插件的文档现在已 100% 使用 Kotlin。Android 文档,包括 Android Gradle 插件和其他 Google 插件、配方、示例应用程序和指南,现在使用 Kotlin DSL。

如您所见,此更改跨越了多个工具的多个版本。请参阅来自 JetBrains 博客Google 博客 的相关公告。

当前限制和下一步

此里程碑使 Kotlin DSL 成为新项目的默认选择和推荐选择。我们也相信 Kotlin DSL 对于大多数现有项目来说是更好的选择。但是,建议使用 Groovy DSL 的具有复杂构建逻辑的非常大型的项目等待迁移。特别是,当使用 Kotlin DSL 更改共享构建逻辑时,脚本编译性能目前比使用 Groovy DSL 慢。请注意,Kotlin 脚本编译输出可以在远程缓存中共享,因此此注意事项仅适用于使用 构建缓存 时实际更改共享构建逻辑的人员。虽然脚本编译性能开销对于新项目来说不会很明显,但对于具有大量现有构建逻辑的项目来说可能会出现问题。

Gradle、JetBrains 和 Google 之间正在进行持续合作,以改进 Kotlin DSL 脚本编译性能。我们的下一个目标是使 Kotlin DSL 成为大型构建的推荐选择。

您应该期待即将发布的 Gradle 和 IDE 版本中会有更多可用性改进。例如,您将很快能够使用 = 运算符为 Gradle 的 延迟属性 赋值,并从 Gradle 域对象容器的简化 DSL 中受益。

了解更多

如果您想了解有关 Gradle 的 Kotlin DSL 的更多信息,请查看 Gradle 的 Kotlin DSL 入门 和更新的 Kotlin DSL 参考。如果您要将现有项目从 Groovy DSL 迁移到 Kotlin DSL,请务必阅读 迁移指南

加入 社区聊天 (#kotlin-dsl 频道) 和 论坛 以提出问题、分享经验并为 Kotlin DSL 的开发做出贡献。您的反馈和贡献非常宝贵,对于塑造 Gradle 构建工具的未来至关重要。

讨论