Gradle 5.0 正式版发布了,官方表示这是史上最快、最安全,最强大的版本,且没有之一。改进的增量编译和增量注释处理构建在已经具备构建缓存和最新检查功能的可靠性能基础之上。依赖对齐和版本锁定提供了可扩展且灵活的依赖管理模型。经过新的性能和依赖关系管理、日志记录和弃用的 API 使用检查,构建扫描获得了显著的改进。静态类型的 Kotlin DSL 可在建立构建逻辑时提供代码完成、重构和其余的 IDE 辅助。html
根据官方文档介绍,这次更新主要带来了以下几个方面的改进:
更快的构建
细粒度的传递依赖管理
编写 Gradle 构建逻辑
更高效的内存执行
新的 Gradle 调用选项
新的 Gradle 任务和插件 APIjava
缓慢的构建过程既浪费钱又浪费精力,而经过使用Gradle 5.0中的新构建缓存和增量处理特性,将使得构建过程带来质的提高。
升级到Gradle 5.0以后,您的构建速度将明显提高,您还能够经过使用和配置本节中描述的其余特性来进一步提升构建的性能。c++
经过重用构建缓存来避免重复的构建工做,这使得Gradle的构建将很是快,Gradle 4.0引入了构建缓存,其目的是重用之前调用Gradle时的输出。spring
如今,Gradle 5.0能够用于Android、Kotlin、c++、Scala和许多其余插件的插件,使得任务能够缓存,所以能够跨不一样的机器重用。有效地使用构建缓存能够将构建时间减小90%左右。apache
此外,Gradle 5.0中的构建缓存在不少场景中也是启用的,例如当一个任务声明一个@ outputdirectory或@OutputFiles集合时。api
在Gradle 5.0中,增量编译器是通过高度优化的,且默认使用增量编译功能。这是一个很是棒的消息,由于编译java任务不须要从新编译全部的源文件,除了第一次以外,这将大大的提供代码编译的效率。缓存
Gradle 5.0中的增量编译器支持增量注解处理,当有注解处理程序时,能够显著提升增量编译的效率。这是一个重要的创新,由于依赖注解处理器的项目愈来愈多。安全
要利用增量注解处理,请确保升级到选择该特性的注解处理程序版本。您能够经过info日志记录或查看注解处理程序来发现给定的注解过程是否具备支持增量功能。app
使用新的annotationProcessor配置能够方便地管理注解处理器,并将它们放到注解处理器路径上。dom
经过对性能、依赖管理、日志记录和废弃api的使用进行新的检查,构建扫描有了显著的改进。这是一个免费的服务,主要提供给Gradle用户在须要添加扫描时使用,在命令行上执行Gradle或应用和配置便可构建扫描。
Gradle 5.0提供了几个新的特性来定制如何选择依赖项,以及改进的POM和BOM支持:
依赖约束提供了对传递依赖项的可靠性控制,已声明的约束列在改进的依赖关系洞察报告和构建扫描中。例如,下面是常见的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' } } }
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构建生成的依赖项时提供了更无缝的体验。
依赖项版本对齐,容许属于同一逻辑组(平台)的不一样模块在依赖项中拥有相同的版本。
这确保全部Spring或Hibernate依赖项具备相同版本的问题。事实上,有许多库是以集合的形式发布的,集合中的每一个库具备相同的版本。
您可使用Gradle 5.0将动态或远程依赖项锁定到特定的版本,从而使依赖项解析更加肯定和可重现,这能够防止依赖项的更改带来地破坏构建问题。
如今可使用Kotlin编写Gradle构建脚本。此外,gradle init还扩展了项目类型和交互性。
Kotlin DSL 从1.0版本便提供了对Gradle的支持。Kotlin中的静态类型容许工具提供更好的IDE帮助,包括调试和重构构建脚本、自动完成和您指望的其余一切。
若是您对用Kotlin编写构建感兴趣,能够从Gradle Kotlin DSL入门开始
但愿使用Gradle构建项目的用户能够选择其余项目类型一块儿使用,如kotlin-library和kotlin-application。此外,您能够选择生成Groovy或Kotlin DSL构建脚本,并自定义项目名称和包。
此外,Gradle文档和入门指南提供了更多的信息,而且更容易发现和访问,主要体如今:
更高效的内存执行命令行参数等特性容许更好的开发工做流,同时下降内存需求和缓存清理能够减小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 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兼容。默认状况下它们是并行构建的,如今能够嵌套了。
使用Gradle 5.0运行带有自定义参数的Java应用程序将比其余版本容易得多,由于您能够在命令行上或经过IDE简单地使用它们。
Gradle 5.0提供了许多新的api,这些api支持更快、更通用的构建逻辑。
新的Worker API将容许您安全的并行和异步执行任务。按照咱们的指南,使用Worker API为自定义任务启用更快的构建任务,下图展现了使用Worker API和不是也Worker API的区别。
正确声明输入和输出对于增量构建和构建缓存行为相当重要。Gradle 5.0增强了约束,并为输入/输出声明引入了新的api,这些api能够帮助您避免一些低级问题。
有些项目在执行过程当中会产生不少的任务,当只执行一些操做时,配置全部这些操做是没有意义的。这就是Gradle 5.0的新配置避免api的神奇之处。经过在自定义任务中采用这些配置,大型项目能够节省高达10%的配置时间。
Gradle 5.0引入了新的api来改进对Maven和Ivy存储库的管理。主要包括:
如今您能够为任务指定超时时间,超时后任务将被中断。
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 } }
为使用内部api的任务Gradle提供自定义的嵌套DSL。Gradle 5.0为嵌套DSL元素提供了一流的api,在考虑用户如何配置任务时提供了更大的灵活性。
Gradle 5.0为计算(或延迟)任务输入和输出提供了额外的API便利。这使得自定义任务时可以将Gradle模型链接在一块儿,而不用担忧给定的属性值被修改,也不用担忧在任务配置期间会避免资源密集型工做。
为了升级到5.0版本。升级前,咱们给出以下一些建议:
若是遇到问题,请参阅故障排除指南或联系社区论坛,您也能够参考咱们给出的升级文档。