专一amp专注 2018-11-30
Gradle 5.0 是有史以来速度最快、最安全、最强大的 Gradle 版本,这是 Gradle 官方给出的评价,v5.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 日志记录或这个表格来查看给定的注解处理器是否支持增量。
新的 annotationProcessor 配置可以用于管理注解处理器,并将它们放在注解处理器路径中。
构建扫描
新的性能提升、依赖关系管理、日志和弃用 API 使用检查让构建扫描得到了显著改善。只需要在命令行执行 Gradle 时添加–scan,或者应用并配置构建扫描插件。
细粒度的传递性依赖管理
Gradle 5.0 提供了一些新功能用于自定义如何选择依赖项,并改进了对 POM 和 BOM 的支持:
依赖约束
依赖约束为传递性依赖提供了非常健壮的控制。
BOM 支持
Gradle 5.0 可以导入 BOM 文件。
此外,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开始。
交互式 gradle init
想要创建新 Gradle 构建的用户现在可以选择其他项目类型:kotlin-library 和 kotlin-application。此外,你可以选择生成 Groovy 或 Kotlin DSL 构建脚本,并自定义项目名称和包。最后,新的交互式 UI 改进了用户体验。
https://gradle.org/images/whats-new/interactive-init.webm
更多面向用例的文档
Gradle 文档和入门指南提供了更多信息和更好的访问性:
更高效的内存利用
用于测试的–fail-fast 和 JVM 应用程序的命令行参数等功能有助于改善开发流程,而更低的内存要求和缓存清理减少了 Gradle 的系统开销。
降低内存使用量
在升级之后,你的构建不仅会更快,而且还会使用更少的内存。很多缓存机制已在 Gradle 5.0 中得到了优化,因此 Gradle 进程的默认最大内存已大大减少。
定期 Gradle 缓存清理
手动清理数十亿字节的旧 Gradle 缓存的日子已经结束了。Gradle 现在可以定期清理过时的缓存。Gradle 还可以更精确地跟踪过时的任务输出,并在不清理可能会导致错误结果的情况下清除它们。
新的 Gradle 调用选项
测试
Gradle 5.0 支持 JUnit 5 的 JUnit Platform、JUnit Jupiter 和 JUnit Vintage,允许你启用测试分组和筛选,以及包含自定义测试引擎。
你可以使用–fail-fast 标志启用更快的红绿循环,Gradle 5.0 默认情况下首先执行失败的测试。
日志记录
在 Gradle 5.0 中,日志消息按照任务进行分组。
除了显示正在执行哪些测试之外,Gradle 丰富的命令行控制台还会显示彩色的构建状态信息,可以一目了然地告诉你是否有任何构建失败。你还可以通过“verbose”控制台模式要求 Gradle 在执行任务时记录任务。
最后,可以通过配置 warning-mode 来汇总、关闭或扩展 Gradle 警告日志。
复合构建
复合构建允许你包含其他独立项目,这样你就可以同时开发应用程序和它依赖的库。
你现在可以使用构建扫描来检查复合构建。复合构建也兼容–continuous。
它们默认进行并行构建,也可以嵌套。
JVM 应用程序的命令行参数
在使用 Gradle 5.0 是,可以更轻松地通过自定义参数运行 Java 应用程序,因为你可以在命令行或 IDE 上使用–args。
新的 Gradle 任务和插件 API
Gradle 5.0 提供了很多新的 API,可实现更快、更通用的构建逻辑。
性能 API
新的 Worker API 支持更安全的并行和异步执行。
改进的任务 I/O
正确地声明输入和输出对于增量构建和构建缓存行为来说是至关重要的。Gradle 5.0 强制执行更严格的约束,并为输入和输出声明引入了新的 API。
Configuration Avoidance API
有些项目会创建大量的任务。如果只需要执行其中一些任务,就没有必要配置所有的任务。于是 Gradle 5.0 提供了 Configuration Avoidance API。通过在自定义任务中使用这个 API,大型项目可以节省高达 10%的配置时间。
发布 API
为了改进 Maven 和 Ivy 存储库的发布,Gradle 5.0 引入了新的 API:
任务超时
现在可以指定任务的超时持续时间,也就是多久之后会被中断。
自定义 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,让你可以更灵活地为用户设计配置任务的方式。
如何升级?
我们提供了一个文档来帮助你从 Gradle 4.x 升级到 Gradle 5.0。在升级之前,我们建议你:
英文原文:https://gradle.org/whats-new/gradle-5/