Gradle 5.0 正式版发布

41次阅读

共计 5023 个字符,预计需要花费 13 分钟才能阅读完成。

Gradle 5.0 正式版发布了,官方表示这是史上最快、最安全,最强大的版本,且没有之一。改进的增量编译和增量注释处理构建在已经具有构建缓存和最新检查功能的可靠性能基础之上。依赖对齐和版本锁定提供了可扩展且灵活的依赖管理模型。通过新的性能和依赖关系管理、日志记录和弃用的 API 使用检查,构建扫描得到了显著的改进。静态类型的 Kotlin DSL 可在创建构建逻辑时提供代码完成、重构和其他的 IDE 辅助。
根据官方文档介绍,此次更新主要带来了如下几个方面的改进:更快的构建细粒度的传递依赖管理编写 Gradle 构建逻辑更高效的内存执行新的 Gradle 调用选项新的 Gradle 任务和插件 API
更快的构建
缓慢的构建过程既浪费钱又浪费精力,而通过使用 Gradle 5.0 中的新构建缓存和增量处理特性,将使得构建过程带来质的提升。升级到 Gradle 5.0 之后,您的构建速度将明显提升,您还可以通过使用和配置本节中描述的其他特性来进一步提高构建的性能。
构建缓存
通过重用构建缓存来避免重复的构建工作,这使得 Gradle 的构建将非常快,Gradle 4.0 引入了构建缓存,其目的是重用以前调用 Gradle 时的输出。
现在,Gradle 5.0 可以用于 Android、Kotlin、c++、Scala 和许多其他插件的插件,使得任务可以缓存,因此可以跨不同的机器重用。有效地使用构建缓存可以将构建时间减少 90% 左右。
此外,Gradle 5.0 中的构建缓存在很多场景中也是启用的,例如当一个任务声明一个 @ outputdirectory 或 @OutputFiles 集合时。
Java 增量编译
在 Gradle 5.0 中,增量编译器是经过高度优化的,且默认使用增量编译功能。这是一个非常棒的消息,因为编译 java 任务不需要重新编译所有的源文件,除了第一次之外,这将大大的提供代码编译的效率。
增量注解处理
Gradle 5.0 中的增量编译器支持增量注解处理,当有注解处理程序时,可以显著提高增量编译的效率。这是一个重要的创新,因为依赖注解处理器的项目越来越多。
要利用增量注解处理,请确保升级到选择该特性的注解处理程序版本。您可以通过 info 日志记录或查看注解处理程序来发现给定的注解过程是否具有支持增量功能。
使用新的 annotationProcessor 配置可以方便地管理注解处理器,并将它们放到注解处理器路径上。
构建扫描
通过对性能、依赖管理、日志记录和废弃 api 的使用进行新的检查,构建扫描有了显著的改进。这是一个免费的服务,主要提供给 Gradle 用户在需要添加扫描时使用,在命令行上执行 Gradle 或应用和配置即可构建扫描。
细粒度的传递依赖管理
Gradle 5.0 提供了几个新的特性来定制如何选择依赖项,以及改进的 POM 和 BOM 支持:

依赖约束允许您定义版本或版本范围,从而限制和传递依赖版本(Maven 不支持)。
平台定义 (又称 Maven BOM 依赖项) 是本地支持的,它允许在不使用外部插件的情况下导入 Spring 之类的东西。
依赖项对齐允许逻辑组中的不同模块 (例如 Jackson 模块) 对齐到相同的版本。

依赖约束
依赖约束提供了对传递依赖项的可靠性控制,已声明的约束列在改进的依赖关系洞察报告和构建扫描中。例如,下面是常见的 Groovy 依赖脚本:
dependencies {
implementation ‘org.apache.httpcomponents:httpclient’
constraints {
implementation(‘org.apache.httpcomponents:httpclient:4.5.3’) {
because ‘previous versions have a bug impacting this application’
}
implementation(‘commons-codec:commons-codec:1.11’) {
because ‘version 1.9 pulled from httpclient has bugs affecting this application’
}
}
}
OM 支持
Gradle 5.0 可导入 BOM 文件,bom (bill of materials) 可以有效解决同一项目,不同版本依赖的问题。
dependencies {
// import a BOM
implementation platform(‘org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE’)

// define dependencies without versions
implementation ‘com.google.code.gson:gson’
implementation ‘dom4j:dom4j’
}
此外,Gradle 5.0 在使用 Maven 构建生成的依赖项时提供了更无缝的体验。

在使用 POM 文件时,Gradle 将正确地分离编译和运行时范围。这可以有效的避免由于以前在编译类路径中包含运行时依赖项而导致的性能下降和依赖项泄漏问题。
Gradle 现在也可以用在 < pom> 元素中。

依赖对齐
依赖项版本对齐,允许属于同一逻辑组 (平台) 的不同模块在依赖项中拥有相同的版本。
这确保所有 Spring 或 Hibernate 依赖项具有相同版本的问题。事实上,有许多库是以集合的形式发布的,集合中的每个库具有相同的版本。
依赖版本锁定
您可以使用 Gradle 5.0 将动态或远程依赖项锁定到特定的版本,从而使依赖项解析更加确定和可重现,这可以防止依赖项的更改带来地破坏构建问题。
编写 Gradle 构建逻辑
现在可以使用 Kotlin 编写 Gradle 构建脚本。此外,gradle init 还扩展了项目类型和交互性。
Kotlin DSL 帮助信息
Kotlin DSL 从 1.0 版本便提供了对 Gradle 的支持。Kotlin 中的静态类型允许工具提供更好的 IDE 帮助,包括调试和重构构建脚本、自动完成和您期望的其他一切。
如果您对用 Kotlin 编写构建感兴趣,可以从 Gradle Kotlin DSL 入门开始
扩大和互动
希望使用 Gradle 构建项目的用户可以选择其他项目类型一起使用,如 kotlin-library 和 kotlin-application。此外,您可以选择生成 Groovy 或 Kotlin DSL 构建脚本,并自定义项目名称和包。
更有指导性的文档
此外,Gradle 文档和入门指南提供了更多的信息,并且更容易发现和访问,主要体现在:

改进了包括入门、故障排除、CLI 引用、管理传递依赖关系,以及其他一些的一些页面。
由 Algolia DocSearch 托管的可搜索参考文档。
一个重新格式化的 PDF 供离线查看。
分类导航。
文档版本选择。

更高效的内存执行
更高效的内存执行命令行参数等特性允许更好的开发工作流,同时降低内存需求和缓存清理可以减少 Gradle 在系统上的开销。
更低的内存要求
升级 Gradle 5.0 不仅会使构建速度更快,而且还会大大减少内存的使用。许多缓存机制在 Gradle 5.0 中得到了优化,并且 Gradle 进程的默认最大内存大大减少。

Process Type
Gradle 4.x default heap
Gradle 5.0 default heap

Command-line client
1 GB
64 MB

Gradle Daemon
1 GB
512 MB

Worker processes
1/4 of physical memory
512 MB

阶段性缓存清理
现在,手动清理缓存的日子已经结束了,Gradle 现在可以实现定期清理过期缓存。Gradle 还更精确地跟踪陈旧的任务输出,并在不导致错误结果的情况下清理它们。
新的 Gradle 调用选项
JUnit 测试
Gradle 5.0 添加了对 JUnit 5 测试的支持:JUnit 平台、JUnit Jupiter 和 JUnit Vintage。这将支持允许您启用测试分组和筛选,并包括定制的测试引擎。
test {
useJUnitPlatform {
excludeTags ‘slow’
includeEngines ‘junit-vintage’
failFast = true
}
}
您可以使用 fail-fast 标志来启用一个更快的红绿循环,默认情况下,第 5.0 版本将首先执行失败的测试,这进一步改进了该标志。
日志
在 Gradle 5.0 中,日志消息可以按照非交互环境(如持续集成执行),进行日志消息的任务分组。
除了显示正在执行哪些测试之外,Gradle 丰富的命令行控制台还显示了一个彩色的构建状态,可以一眼就看出是那些测试失败的情况。您还可以要求 Gradle 在任务使用“详细”控制台模式执行时记录它们。
最后,通过配置警告模式,Gradle 还可以总结、沉默或扩展 Gradle 警告日志。
复合构建
复合构建允许您包含其他独立项目,例如,您可以同时开发应用程序和依赖的库。
现在您还可以使用构建扫描检查复合构建。复合构建还可以与 continuous 兼容。默认情况下它们是并行构建的,现在可以嵌套了。
JVM 命令行参数
使用 Gradle 5.0 运行带有自定义参数的 Java 应用程序将比其他版本容易得多,因为您可以在命令行上或通过 IDE 简单地使用它们。
新的 Gradle 任务和插件 API
Gradle 5.0 提供了许多新的 api,这些 api 支持更快、更通用的构建逻辑。
高性能 API
新的 Worker API 将允许您安全的并行和异步执行任务。按照我们的指南,使用 Worker API 为自定义任务启用更快的构建任务,下图展示了使用 Worker API 和不是也 Worker API 的区别。

改进的 I / O 任务
正确声明输入和输出对于增量构建和构建缓存行为至关重要。Gradle 5.0 加强了约束,并为输入 / 输出声明引入了新的 api,这些 api 可以帮助您避免一些低级问题。

避免冗余配置
有些项目在执行过程中会产生很多的任务,当只执行一些操作时,配置所有这些操作是没有意义的。这就是 Gradle 5.0 的新配置避免 api 的神奇之处。通过在自定义任务中采用这些配置,大型项目可以节省高达 10% 的配置时间。

APIs
Gradle 5.0 引入了新的 api 来改进对 Maven 和 Ivy 存储库的管理。主要包括:

签名插件支持对发布的所有工件签名。
发布了配置范围内的依赖项排除。
Maven 发布和 Ivy 发布插件提供类型安全的 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
为使用内部 api 的任务 Gradle 提供自定义的嵌套 DSL。Gradle 5.0 为嵌套 DSL 元素提供了一流的 api,在考虑用户如何配置任务时提供了更大的灵活性。
Gradle 5.0 为计算 (或延迟) 任务输入和输出提供了额外的 API 便利。这使得自定义任务时能够将 Gradle 模型连接在一起,而不用担心给定的属性值被修改,也不用担心在任务配置期间会避免资源密集型工作。
升级指南
为了升级到 5.0 版本。升级前,我们给出如下一些建议:

使用 Gradle 包装器升级到 Gradle 4.10.2。
运行 gradle 帮助:扫描列出所有不推荐使用的 gradle api 及其位置,包括插件。
更新您的 Gradle 插件,特别是那些在构建扫描的警告的插件。
升级到 JDK 8 或更高版本,需要运行 Gradle 5.0。

如果遇到问题,请参阅故障排除指南或联系社区论坛,您也可以参考我们给出的升级文档。
参考:Gradle 5.0 都有哪些新特性

正文完
 0