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'
}
}
}
Gradle 5.0 版本的新特性
Gradle 5.0 是有史以来最快、最安全、功能最强大的 Gradle 版本。
改进的增量编译和增量注解处理建立在坚实的性能基础上,该基础已经具有构建缓存和最新检查功能。
依赖约束、依赖对齐和版本锁定提供了一个可扩展且灵活的依赖管理模型。
使用 Build Scan™ 服务 的体验已得到显著改善,新增了性能、依赖管理、日志记录和已弃用 API 使用检查。
静态类型的 Kotlin DSL 为我们的 IDE 用户带来了清新的气息,在编写构建逻辑时提供了代码完成、重构和其他 IDE 辅助功能。
我们将近期版本中的主要改进分解为以下类别
最后,您可以继续阅读 如何升级到 Gradle 5.0。
更快的构建
缓慢的构建 浪费大量资金。通过使用 Gradle 5.0 中的新构建缓存和增量处理功能,仅构建您需要的内容,将使开发人员和企业高管感到高兴。
升级到 Gradle 5.0 后,您的构建速度将立即快一些,并且您可以通过使用和配置本节中描述的其他功能来进一步提高其性能。


构建缓存
通过重用先前执行的结果来避免工作使 Gradle 变得快速。Gradle 4.0 引入了 构建缓存,其目的是重用 Gradle 先前任何调用的输出。
如今,用于 Android、Kotlin、C++、Scala 和许多其他插件的插件已使任务可缓存,从而可以在不同的机器之间重用。已发现有效使用构建缓存可以将构建时间减少 高达 90%。
此外,Gradle 5.0 中的构建缓存也在更多场景中启用,例如当任务声明 Collection
的 @OutputDirectories
或 @OutputFiles
时。
增量 Java 编译
在 Gradle 5.0 中,增量编译器经过高度优化,现在是默认设置。
这是个好消息,因为除了首次使用全新构建之外,CompileJava
任务无需重新编译所有源文件。
增量注解处理
Gradle 5.0 中的增量编译器支持 增量注解处理,当存在注解处理器时,显着提高了增量编译的效率。这是一项重要的创新,因为越来越多的项目依赖于注解处理器。
要利用增量注解处理,请确保您升级到已选择此功能的注解处理器版本。您可以通过 --info
日志记录或 此常用注解处理器表 中了解给定的注解进程是否是增量的。
使用 新的 annotationProcessor
配置 轻松管理您的注解处理器并将它们放在注解处理器路径上。
Build Scan™
Build Scan™ 服务 得到了极大的改进,新增了性能、依赖管理、日志记录和已弃用 API 使用的检查。这是一项为 Gradle 用户提供的免费服务 — 只需在命令行上执行 Gradle 时添加 --scan
或应用并配置插件即可。
了解更多 - 如何使用 Gradle Build Scan。
细粒度的传递依赖管理
Gradle 5.0 提供了几个新功能,用于自定义依赖项的选择方式,并改进了 POM 和 BOM 支持
- 依赖约束允许您定义版本或版本范围以限制直接和传递依赖项版本(Maven 不支持)。
- 平台定义,又名 Maven BOM 依赖项,得到原生支持,允许导入诸如 Spring Boot 平台定义之类的东西,而无需使用外部插件。
- 依赖对齐允许逻辑组(例如 Jackson 模块)中的不同模块与同一版本对齐。
- 动态依赖版本现在可以锁定,以实现更好的构建可重复性。
依赖约束
依赖约束 提供了对传递依赖项的强大控制。声明的约束列在改进的 依赖洞察报告 和 Build Scan™ 中。
dependencies {
implementation("org.apache.httpcomponents:httpclient")
constraints {
add("implementation", "org.apache.httpcomponents:httpclient:4.5.3") {
because("previous versions have a bug impacting this application")
}
add("implementation", "commons-codec:commons-codec:1.11") {
because("version 1.9 pulled from httpclient has bugs affecting this application")
}
}
}
BOM 支持
Gradle 5.0 可以 导入物料清单 (BOM) 文件。
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'
}
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 将正确地 分离编译和运行时作用域。这避免了由于先前在编译类路径上包含
runtime
依赖项而导致的性能降低和依赖泄漏。 - Gradle 现在还遵守 POM 的
<parent>
元素中的版本范围。
依赖对齐
依赖版本对齐 允许属于同一逻辑组(平台)的不同模块在依赖关系图中具有相同的版本。
这解决了确保您的所有 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 入门指南 开始。




扩展的交互式 gradle init
想要创建新的 Gradle 构建的用户有更多项目类型可供选择:kotlin-library
和 kotlin-application
。此外,您可以选择生成 Groovy 或 Kotlin DSL 构建脚本,并自定义项目名称和包。最后,新的交互式 UI 使体验特别愉快。
更易于导航且面向用例的文档
Gradle 文档 和入门指南更具信息性、可发现性和可访问性,包括
- 几个新的和改进的页面,包括:快速入门、故障排除、CLI 参考、管理传递依赖项 以及其他几个页面
- 由 Algolia DocSearch 托管的可搜索参考文档。
- 用于离线查看的重新格式化的 PDF
- 分类导航
- 文档版本选择

更节省内存的 Gradle 执行
诸如用于测试的 --fail-fast
和 JVM 应用程序的命令行参数 之类的功能允许更好的开发工作流程,而更低的内存要求和缓存清理减少了 Gradle 对您系统的开销。
更低的内存要求
升级后,不仅您的构建速度会更快,而且它们还将使用更少的内存。Gradle 5.0 中优化了许多缓存机制,因此 Gradle 进程的默认最大内存 已大大降低。
进程类型 | Gradle 4.x 默认堆 | Gradle 5.0 默认堆 |
---|---|---|
命令行客户端 | 1 GB | 64 MB |
Gradle 守护进程 | 1 GB | 512 MB |
工作进程 | 物理内存的 1/4 | 512 MB |
定期 Gradle 缓存清理
手动清理千兆字节旧 Gradle 缓存的日子已经结束。Gradle 现在 定期清理陈旧缓存。Gradle 还更精确地跟踪陈旧的任务输出,并在不这样做可能会导致不正确结果的情况下清理它们。
新的 Gradle 调用选项
测试
Gradle 5.0 包括对 JUnit 5 的支持:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。此支持允许您启用 测试分组 和过滤,并包含自定义测试引擎。
test {
useJUnitPlatform {
excludeTags 'slow'
includeEngines 'junit-vintage'
failFast = true
}
}
tasks.test {
useJUnitPlatform {
excludeTags("slow")
includeEngines("junit-vintage")
failFast = true
}
}
您可以使用 --fail-fast
标志 来启用更快的红绿周期,Gradle 5.0 默认首先执行失败的测试 进一步改进了这一点。
日志记录
在 Gradle 5.0 中,日志消息现在按生成它们的任务分组,用于非交互式环境,如持续集成执行。
除了显示正在执行哪些测试之外,Gradle 的丰富命令行控制台还显示彩色构建状态,让您一目了然地知道是否有任何测试失败。您还可以要求 Gradle 使用“verbose”控制台模式 记录任务的执行情况。
最后,可以通过配置 warning-mode
来汇总、静音或展开 Gradle 警告日志。这将对将您的构建升级到 Gradle 5.0 非常有帮助。

复合构建
复合构建 允许您包含其他独立项目,以便您可以例如同时开发应用程序和它所依赖的库。
您现在可以使用 Build Scan™ 检查 复合构建。复合构建也与 --continuous
兼容。
它们默认并行构建,现在可以嵌套。
JVM 应用程序的命令行参数
使用 Gradle 5.0 运行具有自定义参数的 Java 应用程序变得更加容易,因为您只需 使用 --args
指定它们 在命令行上或通过您的 IDE。
新的 Gradle 任务和插件 API
Gradle 5.0 具有许多新的 API,可实现更快、更通用的构建逻辑。
性能 API
新的 Worker API 允许安全地并行和异步执行。


改进的任务 I/O
正确声明输入和输出对于正确的增量构建和构建缓存行为至关重要。Gradle 5.0 强制执行更严格的约束,并 引入了新的 API 用于输入/输出声明,以帮助您避免正确性问题。

配置避免
有些项目创建了大量任务。当只执行其中一些任务时,配置所有任务是没有意义的。这就是 Gradle 5.0 的新配置避免 API 的用武之地。大型项目可以通过在其自定义任务中采用这些 API 来节省高达 10% 的配置时间。

发布 API
Gradle 5.0 引入了新的 API,以改进发布到 Maven 和 Ivy 仓库
- Signing Plugin 支持 签署出版物的所有工件。
- 配置范围的 依赖排除现在已发布。
- Maven Publish 和 Ivy Publish Plugins 提供类型安全的 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 过去需要使用内部 API。Gradle 5.0 为 嵌套 DSL 元素 提供了第一类 API,使您在考虑用户如何配置任务时具有更大的灵活性。
Gradle 5.0 围绕 计算(或延迟)任务输入和输出 提供了额外的 API 便利性。这使自定义任务作者能够将 Gradle 模型连接在一起,而无需担心何时知道给定的属性值或避免在任务配置期间进行资源密集型工作。
如何升级
我们提供了一份 文档,以帮助您从 Gradle 4.x 升级到 Gradle 5.0。在升级之前,我们建议您
- 使用 Gradle Wrapper 升级到 Gradle 4.10.3。
gradle wrapper --gradle-version=4.10.3
- 运行
gradle help --scan
以列出所有已弃用的 Gradle API 及其位置,包括插件。 - 更新您的 Gradle 插件,特别是 Build Scan™ 弃用报告中列出的那些插件。
- 升级到 JDK 8 或更高版本,这是运行 Gradle 5.0 所必需的。
- 如果您遇到困难,请参阅 故障排除指南 或在 社区论坛 上寻求帮助。
您可以通过 @gradle on Twitter 与 Gradle 团队分享反馈。前进并构建快乐!