Gradle 6.6 发布,引入配置缓存特性,大幅提升构建性能

Stella981
• 阅读 698

点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

Gradle 6.6 发布,引入配置缓存特性,大幅提升构建性能

来源 | https://www.oschina.net/news/117987/gradle-6-6-released

Gradle 6.6 发布了。Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。

此版本最大亮点是引入了一个实验性选项:配置缓存(Configuration caching),它是一个主要的性能优化特性,可以使 Gradle 跳过构建的配置阶段,并尽快开始执行任务。

配置缓存

在运行任何任务之前,Gradle 需要运行配置阶段。当前,这是在每次构建调用时完成的,并且会产生大量的开销,尤其是在大型项目中。

配置缓存通过缓存配置阶段的结果并将其重新用于后续构建,从而可以显著提高构建性能。使用配置缓存,Gradle 可以在不影响构建配置的任何内容发生变化的情况下完全跳过配置阶段,如下所示:

Gradle 6.6 发布,引入配置缓存特性,大幅提升构建性能

此外,启用配置缓存后,Gradle 能够优化任务执行,并默认情况下并行执行更多任务。

目前该特性处于高度试验阶段,默认情况下不启用或建议用于生产环境。可以通过--configuration-cache在命令行上提供参数或将其添加到运行配置中来启用此实验特性。

标准化的运行时类路径改善缓存命中率

对于最新检查和构建缓存,Gradle 需要确定两个任务输入属性是否具有相同的值。为此,Gradle 首先将两个输入标准化,然后比较结果。

现在,运行时类路径分析将检查清单META-INF文件和属性文件,而忽略对注释、空格和顺序差异的更改。此外还可以有选择地忽略不影响运行时类路径的属性。

normalization {    runtimeClasspath {        metaInf {            ignoreAttribute("Implementation-Version")            ignoreProperty("timestamp")        }    }}

类路径上的任何 ZIP 文件被重新生成并且仅因不重要的值或注释而不同的情况下,将提高生成高速缓存命中的可能性。这种规范化最有用的最常见情况是 JAR 文件,不过它也可以被应用于类路径上的任何 ZIP 文件,例如 AAR、WAR 和 APK 文件。

处理用户提供的凭证

构建有时会要求用户提供凭据,例如,为了发布工件,可能需要凭证才能与工件存储库进行身份验证。将凭据保留在构建脚本之外是一个好习惯。

此版本提供了用于凭证的新 API,该凭证通过建立约定以使用 Gradle 属性提供凭证来简化凭证的使用,Gradle 属性可以作为命令行参数、环境变量或gradle.properties文件中的值提供给构建环境。当 Gradle 知道某个时候该版本将需要凭证并且凭证已丢失时,它还会执行“快速失效”。

从此版本开始,可以轻松地将用于身份验证的凭证外部化到工件存储库:

repositories {    maven {        name = 'mySecureRepository'        credentials(PasswordCredentials)        // url = uri(<<some repository url>>)    }}

mySecureRepository将在 Gradle 属性中搜索名称为mySecureRepositoryUsernamemySecureRepositoryPassword的凭据。

同时还可以直接使用新的 provider API 向外部工具提供凭据:

tasks.register('login', Exec) {    def loginProvider =         providers.credentials(PasswordCredentials, 'login')    inputs.property('credentials', loginProvider)    doFirst {       PasswordCredentials loginCredentials = loginProvider.get()       // use credentials    }}

上面的凭据将在 Gradle 属性中使用名称loginUsernameloginPassword进行搜索。

此外,此版本还有其它改进,包括对 Java 编译 --release 标志的支持、文件系统监视的稳定性改进、依赖管理的改进,以及 bug 修复等,详情查看更新说明:https://docs.gradle.org/6.6/release-notes.html

往期推荐

[

华为阿里下班时间曝光:所有的光鲜,都有加班的味道

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247499496%26idx%3D1%26sn%3Dacb4dee60f014ef25718bdb883f1cbf5%26chksm%3D9bd35370aca4da66ace46e28c18c2258aa62d8ae43927c3870e51c2ce25a4b231e7f9b929b4d%26scene%3D21%23wechat_redirect)

[

MySQL 的 Binlog 日志处理工具(Canal,Maxwell,Databus,DTS)对比

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247499496%26idx%3D3%26sn%3De5fad0affdd38ff7e34145dfd9805c22%26chksm%3D9bd35370aca4da66f264103bfbcbb6d6c47a9c1088cfa976dcdf1d4bcc1addc6ceeae3555f4e%26scene%3D21%23wechat_redirect)

[

Serverless:为我们到底带来了什么

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247499380%26idx%3D2%26sn%3Dd015c4a8de3356f90979389ffa2eb86d%26chksm%3D9bd353ecaca4dafaba0ba981733f03f3c81a34b1f32bde1f36db9c112cb3f522ffa7d949d35f%26scene%3D21%23wechat_redirect)

[

为什么有些大公司技术弱爆了?

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247499315%26idx%3D1%26sn%3D1d94ccdf69593f621a0b46c5bbc86cf1%26chksm%3D9bd353abaca4dabdaa9e0160b78e28e6543db0fb30a5815c2c91bf327b695348b55df12f998b%26scene%3D21%23wechat_redirect)

[

Docker 禁止被列入美国“实体名单”的国家、企业、个人使用

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAxODcyNjEzNQ%3D%3D%26mid%3D2247499263%26idx%3D2%26sn%3Dcb30b00cc54d109d9b4355ba4f822452%26chksm%3D9bd35067aca4d971c5f7da47d0ee318f8f76d263226bc4985377f5ec2f882c90d4b9049c966c%26scene%3D21%23wechat_redirect)

星球限时拼团优惠进行中

Gradle 6.6 发布,引入配置缓存特性,大幅提升构建性能

我的星球是否适合你?

点击阅读原文看看我们都聊过啥?

本文分享自微信公众号 - 程序猿DD(didispace)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Stella981 Stella981
3年前
ClickHouse大数据领域企业级应用实践和探索总结
点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源!(https://oscimg.oschina.net/oscnet/bb00e5f54a164cb9827f1dbccdf87443.jpg)!(https://oscimg.oschina.net/oscnet/dc8da835ff1b4
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这