史上最快最强大的Gradle 5.0发布,新特性全解

Posted 前端之巅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了史上最快最强大的Gradle 5.0发布,新特性全解相关的知识,希望对你有一定的参考价值。

来源|Gradle 博客
译者|无明

Gradle 5.0 是有史以来速度最快、最安全、最强大的 Gradle 版本,这是 Gradle 官方给出的评价,v5.0 新增的功能主要包括:

  • 在构建缓存和更新检查功能的基础之上,Gradle 5.0 又改进了增量编译和增量注解处理功能。

  • 依赖约束、依赖对齐和版本锁定提供了可伸缩且灵活的依赖管理模型。

  • 新的性能提升、依赖关系管理、日志和弃用 API 使用检查让构建扫描得到了显著改善。

  • 静态类型的 Kotlin DSL 提供了代码自动完成、重构和其他 IDE 辅助,为 IDE 用户带来了一股清新的空气。

更快的构建

构建速度慢其实是对金钱的浪费。使用 Gradle 5.0 新的构建缓存和增量处理功能来构建你所需的内容,可以为开发人员和业务主管剩下很多时间。

升级到 Gradle 5.0 后,你的构建将立即变快,并且你可以通过使用和配置其他功能来进一步提高性能。

史上最快、最强大的Gradle 5.0发布,新特性全解

 构建缓存

通过重用先前执行的结果来避免重复工作让 Gradle 变得更快。Gradle 4.0 引入了构建缓存,目的是重用之前的调用输出。

今天,android、Kotlin、C++、Scala 和很多其他插件使用了任务缓存,因此可以在不同的机器上重用。有效使用构建缓存可以将构建时间减少高达 90%。

此外,Gradle 5.0 中的构建缓存也被用在更多的场景中,例如当一个任务声明了 @OutputDirectories 或 @OutputFiles 的集合时。

https://gradle.org/images/whats-new/gradle-4.5-assemble-cache.webm

 增量 Java 编译

在 Gradle 5.0 中,增量编译器经过高度优化,并成为默认的编译器。

除了第一次的构建,CompileJava 任务不需要重新编译所有源文件。

 增量注解处理

Gradle 5.0 的增量编译器支持增量注解处理,这是一项重要的创新,因为越来越多的项目依赖于注解处理器。

要使用增量注解处理,需要升级到受支持的注解处理器版本。你可以通过 --info 日志记录或这个表格(https://github.com/gradle/gradle/issues/5277)来查看给定的注解处理器是否支持增量。

新的 annotationProcessor 配置可以用于管理注解处理器,并将它们放在注解处理器路径中。

 构建扫描

新的性能提升、依赖关系管理、日志和弃用 API 使用检查让构建扫描得到了显著改善。只需要在命令行执行 Gradle 时添加 --scan,或者应用并配置构建扫描插件(https://guides.gradle.org/creating-build-scans/)。

细粒度的传递性依赖管理

Gradle 5.0 提供了一些新功能用于自定义如何选择依赖项,并改进了对 POM 和 BOM 的支持:

  • 依赖约束让你可以通过定义版本或版本区间来限制直接和传递依赖(Maven 还不支持)。

  • 原生支持平台定义,即 Maven BOM 依赖,可以在不使用外部插件的情况下导入 Spring Boot 平台定义之类的东西。

  • 依赖对齐允许逻辑组中的不同模块(例如 Jackson 模块)对齐同一版本。

  • 现在可以锁定动态依赖版本,以便更好地进行可重现构建。

 依赖约束

依赖约束为传递性依赖提供了非常健壮的控制。

史上最快、最强大的Gradle 5.0发布,新特性全解

史上最快、最强大的Gradle 5.0发布,新特性全解

 BOM 支持

Gradle 5.0 可以导入 BOM 文件。

史上最快、最强大的Gradle 5.0发布,新特性全解

史上最快、最强大的Gradle 5.0发布,新特性全解

此外,Gradle 5.0 在使用 Maven 构建产生的依赖项方面提供了更加无缝的体验。

在使用 POM 文件时,Gradle 可以正确地分离编译和运行时作用域,从而避免了由于之前在编译类路径中包含运行时依赖而导致的性能降低和依赖泄漏。Gradle 现在也可以遵循 POM 元素的版本区间。

 依赖对齐

依赖版本对齐允许属于同一逻辑组(平台)的不同模块在依赖关系图中具有相同的版本。

这样可以确保所有 Spring 或 Hibernate 依赖项具有相同的版本(如果可以的话)。实际上,有很多库作为集合发布,集合中的每个库具有相同的版本。

 依赖版本锁定

你可以使用 Gradle 5.0 将动态或区间依赖项锁定在特定版本,让依赖项解析更具确定性和可重现性,防止传递性依赖项的变更意外破坏你的构建。

编写 Gradle 构建逻辑

现在可以使用 Kotlin 编写 Gradle 构建脚本。此外,gradle init 支持更多的项目类型和交互性。

 Kotlin DSL提供了IDE辅助

到 Gradle 5.0 为止,Kotlin DSL 1.0 已经为投入生产使用做好了准备。Kotlin 的静态类型为 IDE 提供了更好的辅助,包括构建脚本的调试和重构、自动完成以及你期望的其他所有内容。

如果你有兴趣使用 Kotlin 编写你的构建版本,请从 Gradle Kotlin DSL Primer(https://docs.gradle.org/5.0/userguide/kotlin_dsl.html)开始。

史上最快、最强大的Gradle 5.0发布,新特性全解

 交互式 gradle init

想要创建新 Gradle 构建的用户现在可以选择其他项目类型:kotlin-library 和 kotlin-application。此外,你可以选择生成 Groovy 或 Kotlin DSL 构建脚本,并自定义项目名称和包。最后,新的交互式 UI 改进了用户体验。

https://gradle.org/images/whats-new/interactive-init.webm

 更多面向用例的文档

Gradle 文档和入门指南提供了更多信息和更好的访问性:

  • 几个新改进的页面,包括:入门、故障诊断、CLI 参考、管理传递性依赖以及其他几个;

  • 由 Algolia DocSearch 托管的可搜索参考文档;

  • 用于离线查看的 PDF;

  • 分类导航;

  • 文档版本选择。

史上最快、最强大的Gradle 5.0发布,新特性全解

更高效的内存利用

用于测试的 --fail-fast 和 JVM 应用程序的命令行参数等功能有助于改善开发流程,而更低的内存要求和缓存清理减少了 Gradle 的系统开销。

 降低内存使用量

在升级之后,你的构建不仅会更快,而且还会使用更少的内存。很多缓存机制已在 Gradle 5.0 中得到了优化,因此 Gradle 进程的默认最大内存已大大减少。

史上最快、最强大的Gradle 5.0发布,新特性全解

 定期 Gradle 缓存清理

手动清理数十亿字节的旧 Gradle 缓存的日子已经结束了。Gradle 现在可以定期清理过时的缓存。Gradle 还可以更精确地跟踪过时的任务输出,并在不清理可能会导致错误结果的情况下清除它们。

新的 Gradle 调用选项
 测试

Gradle 5.0 支持 JUnit 5 的 JUnit Platform、JUnit Jupiter 和 JUnit Vintage,允许你启用测试分组和筛选,以及包含自定义测试引擎。

史上最快、最强大的Gradle 5.0发布,新特性全解

史上最快、最强大的Gradle 5.0发布,新特性全解

你可以使用 --fail-fast 标志启用更快的红绿循环,Gradle 5.0 默认情况下首先执行失败的测试。

 日志记录

在 Gradle 5.0 中,日志消息按照任务进行分组。

除了显示正在执行哪些测试之外,Gradle 丰富的命令行控制台还会显示彩色的构建状态信息,可以一目了然地告诉你是否有任何构建失败。你还可以通过“verbose”控制台模式要求 Gradle 在执行任务时记录任务。

最后,可以通过配置 warning-mode 来汇总、关闭或扩展 Gradle 警告日志。

史上最快、最强大的Gradle 5.0发布,新特性全解

 复合构建

复合构建允许你包含其他独立项目,这样你就可以同时开发应用程序和它依赖的库。

你现在可以使用构建扫描来检查复合构建。复合构建也兼容 --continuous。

它们默认进行并行构建,也可以嵌套。

 JVM 应用程序的命令行参数

在使用 Gradle 5.0 是,可以更轻松地通过自定义参数运行 Java 应用程序,因为你可以在命令行或 IDE 上使用 --args。

新的 Gradle 任务和插件 API

Gradle 5.0 提供了很多新的 API,可实现更快、更通用的构建逻辑。

 性能 API

新的 Worker API 支持更安全的并行和异步执行。

史上最快、最强大的Gradle 5.0发布,新特性全解

 改进的任务 I/O

正确地声明输入和输出对于增量构建和构建缓存行为来说是至关重要的。Gradle 5.0 强制执行更严格的约束,并为输入和输出声明引入了新的 API。

史上最快、最强大的Gradle 5.0发布,新特性全解

 Configuration Avoidance API

有些项目会创建大量的任务。如果只需要执行其中一些任务,就没有必要配置所有的任务。于是 Gradle 5.0 提供了 Configuration Avoidance API。通过在自定义任务中使用这个 API,大型项目可以节省高达 10%的配置时间。

史上最快、最强大的Gradle 5.0发布,新特性全解

 发布 API

为了改进 Maven 和 Ivy 存储库的发布,Gradle 5.0 引入了新的 API:

  • 签名插件支持为发布的所有工件签名。

  • 配置级别的排除依赖现在也包含在发布中。

  • Maven Publish 和 Ivy Publish 插件提供了类型安全的 DSL,用于自定义作为发布一部分而生成的 POM 或 Ivy 模块。

 任务超时

现在可以指定任务的超时持续时间,也就是多久之后会被中断。

 自定义 CLI 参数

Gradle 5.0 提供了允许用户配置自定义任务的新方法。

首先,你可以使用 @Option 创建自定义命令行选项。用户通过执行 gradle help --task your-task 来获得这些自定义选项:

public class UrlVerify extends DefaultTask {
    private String url;

    @Option(option = "url", description = "Configures the URL to be verified.")
    public void setUrl(String url) {
        this.url = url;
    }

    @Input
    public String getUrl() {
        return url;
    }

    @TaskAction
    public void verify() {
        getLogger().quiet("Verifying URL '{}'", url);

        // verify URL by making a HTTP call
    }
}
 自定义嵌套 DSL

为任务提供自定义嵌套 DSL。Gradle 5.0 为嵌套的 DSL 元素提供了一等 API,让你可以更灵活地为用户设计配置任务的方式。

如何升级?

我们提供了一个文档(https://docs.gradle.org/5.0/userguide/upgrading_version_4.html)来帮助你从 Gradle 4.x 升级到 Gradle 5.0。在升级之前,我们建议你:

  • 使用 Gradle 包装器升级到 Gradle 4.10.2:gradle wrapper --gradle-version = 4.10.2。

  • 运行 gradle help --scan 列出已弃用的 Gradle API 以及使用了这些 API 的地方(包括插件)。

  • 更新 Gradle 插件,尤其是构建扫描报告中列出的已启用的插件。

  • 升级到运行 Gradle 5.0 所需的 JDK 8 或更高版本。

  • 如果你遇到问题,请参阅故障排除指南(https://docs.gradle.org/5.0/userguide/troubleshooting.html#troubleshooting)或访问社区论坛(https://discuss.gradle.org/)。

英文原文:

https://gradle.org/whats-new/gradle-5/

 活动推荐

12 月 7 日北京 ArchSummit 全球架构师峰会上,来自美团、百度、阿里、快手的讲师齐聚一堂,共同分享“打造 Native 体验 Hybrid App 实践”、“定制统一可维护的前端架构”、“10 年双十一前端关键技术”和“同构 Web App 的另一种探索”的分享。

会议开幕倒数第 7 天,购票联系票务灰灰 17326843116

详情可扫描以下二维码或点击阅读原文


以上是关于史上最快最强大的Gradle 5.0发布,新特性全解的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 5.0 正式版本发布,一大波新特性来袭

一文看全苹果史上最「丰满」开发者大会:第五大系统诞生,最强电脑来袭!

GitHub遭遇史上最强DDoS攻击;李彦宏称从没觉得百度在模仿谷歌;Gradle 4.6发布 ; 今日福利

史上最强超融合入门干货:超融合与传统架构特性及收益详细对比

史上最强大的40多个纯CSS绘制的图形

史上最强大的selenium webdriver的封装