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

\u003cp\u003eGradle 5.0是有史以来速度最快、最安全、最强大的Gradle版本,这是Gradle官方给出的评价,v5.0 新增的功能主要包括:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e在构建缓存和更新检查功能的基础之上,Gradle 5.0又改进了增量编译和增量注解处理功能。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e依赖约束、依赖对齐和版本锁定提供了可伸缩且灵活的依赖管理模型。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e新的性能提升、依赖关系管理、日志和弃用API使用检查让构建扫描得到了显著改善。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e静态类型的Kotlin DSL提供了代码自动完成、重构和其他IDE辅助,为IDE用户带来了一股清新的空气。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e更快的构建\u003c/h2\u003e\n\u003cp\u003e构建速度慢其实是对金钱的浪费。使用Gradle 5.0新的构建缓存和增量处理功能来构建你所需的内容,可以为开发人员和业务主管剩下很多时间。\u003c/p\u003e\n\u003cp\u003e升级到Gradle 5.0后,你的构建将立即变快,并且你可以通过使用和配置其他功能来进一步提高性能。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b398f132b.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e构建缓存\u003c/h4\u003e\n\u003cp\u003e通过重用先前执行的结果来避免重复工作让Gradle变得更快。Gradle 4.0引入了构建缓存,目的是重用之前的调用输出。\u003c/p\u003e\n\u003cp\u003e今天,Android、Kotlin、C++、Scala和很多其他插件使用了任务缓存,因此可以在不同的机器上重用。有效使用构建缓存可以将构建时间减少高达90%。\u003c/p\u003e\n\u003cp\u003e此外,Gradle 5.0中的构建缓存也被用在更多的场景中,例如当一个任务声明了@OutputDirectories或@OutputFiles的集合时。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gradle.org/images/whats-new/gradle-4.5-assemble-cache.webm\"\u003ehttps://gradle.org/images/whats-new/gradle-4.5-assemble-cache.webm\u003c/a\u003e\u003c/p\u003e\n\u003ch4\u003e增量Java编译\u003c/h4\u003e\n\u003cp\u003e在Gradle 5.0中,增量编译器经过高度优化,并成为默认的编译器。\u003c/p\u003e\n\u003cp\u003e除了第一次的构建,CompileJava任务不需要重新编译所有源文件。\u003c/p\u003e\n\u003ch4\u003e增量注解处理\u003c/h4\u003e\n\u003cp\u003eGradle 5.0的增量编译器支持增量注解处理,这是一项重要的创新,因为越来越多的项目依赖于注解处理器。\u003c/p\u003e\n\u003cp\u003e要使用增量注解处理,需要升级到受支持的注解处理器版本。你可以通过–info日志记录或这个\u003ca href=\"https://github.com/gradle/gradle/issues/5277\"\u003e表格\u003c/a\u003e来查看给定的注解处理器是否支持增量。\u003c/p\u003e\n\u003cp\u003e新的annotationProcessor配置可以用于管理注解处理器,并将它们放在注解处理器路径中。\u003c/p\u003e\n\u003ch4\u003e构建扫描\u003c/h4\u003e\n\u003cp\u003e新的性能提升、依赖关系管理、日志和弃用API使用检查让构建扫描得到了显著改善。只需要在命令行执行Gradle时添加–scan,或者应用并配置构建\u003ca href=\"https://guides.gradle.org/creating-build-scans/\"\u003e扫描插件\u003c/a\u003e。\u003c/p\u003e\n\u003ch2\u003e细粒度的传递性依赖管理\u003c/h2\u003e\n\u003cp\u003eGradle 5.0提供了一些新功能用于自定义如何选择依赖项,并改进了对POM和BOM的支持:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e依赖约束让你可以通过定义版本或版本区间来限制直接和传递依赖(Maven还不支持)。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e原生支持平台定义,即Maven BOM依赖,可以在不使用外部插件的情况下导入Spring Boot平台定义之类的东西。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e依赖对齐允许逻辑组中的不同模块(例如Jackson模块)对齐同一版本。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e现在可以锁定动态依赖版本,以便更好地进行可重现构建。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003e依赖约束\u003c/h4\u003e\n\u003cp\u003e依赖约束为传递性依赖提供了非常健壮的控制。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b415c146d.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b4305335d.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003eBOM支持\u003c/h4\u003e\n\u003cp\u003eGradle 5.0可以导入BOM文件。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b454c96c9.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b4760d31f.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003cp\u003e此外,Gradle 5.0在使用Maven构建产生的依赖项方面提供了更加无缝的体验。\u003c/p\u003e\n\u003cp\u003e在使用POM文件时,Gradle可以正确地分离编译和运行时作用域,从而避免了由于之前在编译类路径中包含运行时依赖而导致的性能降低和依赖泄漏。\u003cbr /\u003e\nGradle现在也可以遵循POM\u003cparent\u003e元素的版本区间。\u003c/p\u003e\n\u003ch4\u003e依赖对齐\u003c/h4\u003e\n\u003cp\u003e依赖版本对齐允许属于同一逻辑组(平台)的不同模块在依赖关系图中具有相同的版本。\u003c/p\u003e\n\u003cp\u003e这样可以确保所有Spring或Hibernate依赖项具有相同的版本(如果可以的话)。实际上,有很多库作为集合发布,集合中的每个库具有相同的版本。\u003c/p\u003e\n\u003ch4\u003e依赖版本锁定\u003c/h4\u003e\n\u003cp\u003e你可以使用Gradle 5.0将动态或区间依赖项锁定在特定版本,让依赖项解析更具确定性和可重现性,防止传递性依赖项的变更意外破坏你的构建。\u003c/p\u003e\n\u003ch2\u003e编写Gradle构建逻辑\u003c/h2\u003e\n\u003cp\u003e现在可以使用Kotlin编写Gradle构建脚本。此外,gradle init支持更多的项目类型和交互性。\u003c/p\u003e\n\u003ch4\u003eKotlin DSL提供了IDE辅助\u003c/h4\u003e\n\u003cp\u003e到Gradle 5.0为止,Kotlin DSL 1.0已经为投入生产使用做好了准备。Kotlin的静态类型为IDE提供了更好的辅助,包括构建脚本的调试和重构、自动完成以及你期望的其他所有内容。\u003c/p\u003e\n\u003cp\u003e如果你有兴趣使用Kotlin编写你的构建版本,请从\u003ca href=\"https://docs.gradle.org/5.0/userguide/kotlin_dsl.html\"\u003eGradle Kotlin DSL Primer\u003c/a\u003e开始。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b4c5cabdf.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e交互式gradle init\u003c/h4\u003e\n\u003cp\u003e想要创建新Gradle构建的用户现在可以选择其他项目类型:kotlin-library和kotlin-application。此外,你可以选择生成Groovy或Kotlin DSL构建脚本,并自定义项目名称和包。最后,新的交互式UI改进了用户体验。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gradle.org/images/whats-new/interactive-init.webm\"\u003ehttps://gradle.org/images/whats-new/interactive-init.webm\u003c/a\u003e\u003c/p\u003e\n\u003ch4\u003e更多面向用例的文档\u003c/h4\u003e\n\u003cp\u003eGradle文档和入门指南提供了更多信息和更好的访问性:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e几个新改进的页面,包括:入门、故障诊断、CLI参考、管理传递性依赖以及其他几个;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e由Algolia DocSearch托管的可搜索参考文档;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e用于离线查看的PDF;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e分类导航;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e文档版本选择。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b514bacf3.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch2\u003e更高效的内存利用\u003c/h2\u003e\n\u003cp\u003e用于测试的–fail-fast和JVM应用程序的命令行参数等功能有助于改善开发流程,而更低的内存要求和缓存清理减少了Gradle的系统开销。\u003c/p\u003e\n\u003ch4\u003e降低内存使用量\u003c/h4\u003e\n\u003cp\u003e在升级之后,你的构建不仅会更快,而且还会使用更少的内存。很多缓存机制已在Gradle 5.0中得到了优化,因此Gradle进程的默认最大内存已大大减少。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b5405343c.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e定期Gradle缓存清理\u003c/h4\u003e\n\u003cp\u003e手动清理数十亿字节的旧Gradle缓存的日子已经结束了。Gradle现在可以定期清理过时的缓存。Gradle还可以更精确地跟踪过时的任务输出,并在不清理可能会导致错误结果的情况下清除它们。\u003c/p\u003e\n\u003ch2\u003e新的Gradle调用选项\u003c/h2\u003e\n\u003ch4\u003e测试\u003c/h4\u003e\n\u003cp\u003eGradle 5.0支持JUnit 5的JUnit Platform、JUnit Jupiter和JUnit Vintage,允许你启用测试分组和筛选,以及包含自定义测试引擎。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b56c6b4e2.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b58848cf5.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003cp\u003e你可以使用–fail-fast标志启用更快的红绿循环,Gradle 5.0默认情况下首先执行失败的测试。\u003c/p\u003e\n\u003ch4\u003e日志记录\u003c/h4\u003e\n\u003cp\u003e在Gradle 5.0中,日志消息按照任务进行分组。\u003c/p\u003e\n\u003cp\u003e除了显示正在执行哪些测试之外,Gradle丰富的命令行控制台还会显示彩色的构建状态信息,可以一目了然地告诉你是否有任何构建失败。你还可以通过“verbose”控制台模式要求Gradle在执行任务时记录任务。\u003c/p\u003e\n\u003cp\u003e最后,可以通过配置warning-mode来汇总、关闭或扩展Gradle警告日志。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b5ddd7015.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e复合构建\u003c/h4\u003e\n\u003cp\u003e复合构建允许你包含其他独立项目,这样你就可以同时开发应用程序和它依赖的库。\u003c/p\u003e\n\u003cp\u003e你现在可以使用构建扫描来检查复合构建。复合构建也兼容–continuous。\u003c/p\u003e\n\u003cp\u003e它们默认进行并行构建,也可以嵌套。\u003c/p\u003e\n\u003ch4\u003eJVM应用程序的命令行参数\u003c/h4\u003e\n\u003cp\u003e在使用Gradle 5.0是,可以更轻松地通过自定义参数运行Java应用程序,因为你可以在命令行或IDE上使用–args。\u003c/p\u003e\n\u003ch2\u003e新的Gradle任务和插件API\u003c/h2\u003e\n\u003cp\u003eGradle 5.0提供了很多新的API,可实现更快、更通用的构建逻辑。\u003c/p\u003e\n\u003ch4\u003e性能API\u003c/h4\u003e\n\u003cp\u003e新的Worker API支持更安全的并行和异步执行。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b62038d2c.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e改进的任务I/O\u003c/h4\u003e\n\u003cp\u003e正确地声明输入和输出对于增量构建和构建缓存行为来说是至关重要的。Gradle 5.0强制执行更严格的约束,并为输入和输出声明引入了新的API。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b645c0f9b.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003eConfiguration Avoidance API\u003c/h4\u003e\n\u003cp\u003e有些项目会创建大量的任务。如果只需要执行其中一些任务,就没有必要配置所有的任务。于是Gradle 5.0提供了Configuration Avoidance API。通过在自定义任务中使用这个API,大型项目可以节省高达10%的配置时间。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00b6709c183.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e发布API\u003c/h4\u003e\n\u003cp\u003e为了改进Maven和Ivy存储库的发布,Gradle 5.0引入了新的API:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e签名插件支持为发布的所有工件签名。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e配置级别的排除依赖现在也包含在发布中。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMaven Publish和Ivy Publish插件提供了类型安全的DSL,用于自定义作为发布一部分而生成的POM或Ivy模块。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003e任务超时\u003c/h4\u003e\n\u003cp\u003e现在可以指定任务的超时持续时间,也就是多久之后会被中断。\u003c/p\u003e\n\u003ch4\u003e自定义CLI参数\u003c/h4\u003e\n\u003cp\u003eGradle 5.0提供了允许用户配置自定义任务的新方法。\u003c/p\u003e\n\u003cp\u003e首先,你可以使用@Option创建自定义命令行选项。用户通过执行gradle help --task your-task来获得这些自定义选项:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epublic class UrlVerify extends DefaultTask {\n private String url;\n\n @Option(option = \u0026quot;url\u0026quot;, description = \u0026quot;Configures the URL to be verified.\u0026quot;)\n public void setUrl(String url) {\n this.url = url;\n }\n\n @Input\n public String getUrl() {\n return url;\n }\n\n @TaskAction\n public void verify() {\n getLogger().quiet(\u0026quot;Verifying URL '{}'\u0026quot;, url);\n\n // verify URL by making a HTTP call\n }\n}\n\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch4\u003e自定义嵌套DSL\u003c/h4\u003e\n\u003cp\u003e为任务提供自定义嵌套DSL。Gradle 5.0为嵌套的DSL元素提供了一等API,让你可以更灵活地为用户设计配置任务的方式。\u003c/p\u003e\n\u003ch2\u003e如何升级?\u003c/h2\u003e\n\u003cp\u003e我们提供了一个\u003ca href=\"https://docs.gradle.org/5.0/userguide/upgrading_version_4.html\"\u003e文档\u003c/a\u003e来帮助你从Gradle 4.x升级到Gradle 5.0。在升级之前,我们建议你:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e使用Gradle包装器升级到Gradle 4.10.2:gradle wrapper --gradle-version = 4.10.2。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e运行gradle help --scan列出已弃用的Gradle API以及使用了这些API的地方(包括插件)。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e更新Gradle插件,尤其是构建扫描报告中列出的已启用的插件。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e升级到运行Gradle 5.0所需的JDK 8或更高版本。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e如果你遇到问题,请参阅故障排除\u003ca href=\"https://docs.gradle.org/5.0/userguide/troubleshooting.html#troubleshooting\"\u003e指南\u003c/a\u003e或访问\u003ca href=\"https://discuss.gradle.org/\"\u003e社区论坛\u003c/a\u003e。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e英文原文:\u003ca href=\"https://gradle.org/whats-new/gradle-5/\"\u003ehttps://gradle.org/whats-new/gradle-5/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e更多内容,请关注前端之巅公众号(ID:frontshow)\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c00ce05c456a.png\" alt=\"\" /\u003e\u003c/p\u003e\n\u003ch4\u003e相关推荐\u003c/h4\u003e\n\u003cp\u003e\u003cimg src=\"https://static001.infoq.cn/resource/image/49/c1/491b12f87b0d61cda6efd233031f10c1.jpg\" alt=\"\" /\u003e\u003cbr /\u003e\n12 月 7 日北京 ArchSummit 全球架构师峰会上,来自 Google、Netflix、BAT、滴滴、美团 等公司技术讲师齐聚一堂,共同分享“微服务、金融技术、前端黑科技、智能运维等相关经验与实践。详情点击 \u003ca href=\"https://bj2018.archsummit.com/schedule\"\u003ehttps://bj2018.archsummit.com/schedule\u003c/a\u003e\u003c/p\u003e\n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值