gradle-6.8.2-all 百度网盘下载

Gradle-6.8.2 发布

Gradle团队很兴奋地宣布Gradle 6.8.2。

此版本显著改进了Kotlin DSL构建脚本编译的性能,增加了几个对Java工具链支持的改进,包括供应商选择,并使其易于直接从命令行执行复合构建中的任何任务。此版本还引入了新的一致性解决方案的依赖关系管理API.

这实验配置缓存增加了对Gradle附带的复合版本和更多核心插件的支持。

其他几个丰富在此版本中添加了。

我们预计不会有很多版本受到影响,但是这个版本禁用过时的TLS v1.0版和1.1版协议提高从外部存储库解析依赖项的构建的安全性。

下载连接:点击进入快速下载

升级说明

通过更新您的包装器,切换您的构建以使用Gradle 6.8.2:

./gradlew wrapper --gradle-version=6.8.2

参见Gradle 6.x升级指南了解升级到Gradle 6.8.2时的弃用、重大变更和其他注意事项。

注意:Gradle 6.8已经二补丁版本,修复了原始版本的几个问题。我们建议始终使用最新的补丁版本。

关于Java、Groovy、Kotlin和Android兼容性,请参见完全兼容性说明.

性能改进

Kotlin DSL脚本编译改进

Kotlin DSL脚本编译改进
此版本编译了格雷尔·科特林DSL脚本(*.gradle.kts)更快,减少了消耗的内存量,并引入了编译避免,可以完全消除重新编译Kotlin构建脚本的需要。

在一个包含100个子项目的示例构建中,累积的脚本编译时间从大约50秒一直到大约21秒冷缓存和冷守护进程。垃圾收集时间从2.6秒一直到1.3秒。这种改进也减少了内存压力。最重要的是,非ABI的变化可以现在完全消除构建脚本重新编译,节省了那21秒。
在这里插入图片描述
到目前为止,任何构建逻辑的变化建筑Src需要重新编译所有的构建脚本。此版本为引入了编译避免格雷尔·科特林DSL剧本。

避免编译将导致Gradle仅在共享构建逻辑的更改影响构建脚本类路径的ABI(应用程序二进制接口)时才重新编译构建脚本。对构建逻辑的私有实现细节的更改,如私有方法或类、非私有方法或类的主体,以及对预编译脚本插件,将不再触发项目生成脚本的重新编译。

避免编译也适用于构建脚本的类路径上的任何JAR中的更改。这包括由包含的构建中定义的插件添加的jar和通过buildscript {}阻止。

虽然对构建的影响可能有所不同,但在编辑Kotlin DSL构建逻辑时,大多数构建的反馈循环可能会明显缩短。

注意:科特林的公共内嵌函数不支持避免编译。如果这样的函数出现在buildscript的类路径上的JAR的公共API中,那么对该JAR中的类的更改将导致Gradle退回到它的旧行为。例如,如果buildSrc包含一个具有公共内联函数的类,那么对buildSrc将导致所有构建脚本被重新编译。

使用运行时类路径的任务的缓存命中率更高

为最新支票和构建缓存,Gradle需要确定两个任务输入属性是否具有相同的值。为了做到这一点,格雷尔首先正常化两个输入,然后比较结果。

运行时类路径分析现在可以智能地检查所有属性文件,忽略注释、空白和属性顺序的差异。此外,您可以有选择地忽略不影响运行时类路径的属性。

normalization {
    properties('**/build-info.properties') {
        ignoreProperty('timestamp')
    }
}

当类路径上的属性文件重新生成或仅在不重要的值上有所不同时,这提高了更新和构建缓存命中的可能性。

看见用户手册了解更多信息。

存在空目录时,缓存命中率会更高

为最新支票和构建缓存,Gradle需要确定两个目录结构是否包含相同的内容。当一个目录包含一个空目录时,它被认为与不存在空目录的相同目录具有不同的内容。

这可能并不总是令人满意的。在许多情况下,只有目录结构中的文件可能是重要的,空目录对任务的输出没有影响。在这种情况下,因为存在空目录而重新执行任务是不必要的,因为它只会产生相同的输出。

引入了新的注释来解决这种情况。输入注释有@输入文件或者@输入目录可以附加注释为@ IgnoreEmptyDirectories指定在生成缓存和最新检查期间不应考虑目录。对于以这种方式标注的输入,只有对文件(包括文件路径)的更改才会被视为输入值的差异。

class MyTask extends DefaultTask {
    @InputFiles
    @PathSensitive(@PathSensitivity.RELATIVE)
    @IgnoreEmptyDirectories
    FileCollection inputFiles;
}

类似地,也有相应的运行时API等价物:

tasks.register("myTask") {
    ext.inputFiles = files()
    inputs.files(inputFiles)
          .withPropertyName('inputFiles')
          .withPathSensitivity(PathSensitivity.RELATIVE)
          .ignoreEmptyDirectories()
}

源任务, JavaCompile, GroovyCompile,以及AntlrTask已全部更新,现在在进行最新检查和构建缓存键计算时会忽略空目录。

看见用户手册了解更多信息。

配置缓存改进

这配置缓存通过缓存配置阶段的结果来提高构建性能。使用配置缓存,当没有任何影响构建配置的内容发生变化时,Gradle可以完全跳过配置阶段。

阅读…的文章此功能及其影响在格雷尔的博客上。您还可以在中跟踪配置缓存支持的进度核心插件和社区插件.

支持复合构建

从这个版本开始,复合构件配置缓存完全支持。

更多支持的核心插件

在此版本中,所有核心代码分析插件都完全支持配置缓存:

  • checkstyle
  • pmd
  • codenarc
  • jacoco

参见支持的核心插件矩阵在用户手册中。

Java工具链的改进

Java工具链支持提供了一种简单的方法来声明构建项目应该使用的Java版本。默认情况下,Gradle会自动检测已安装的JDK可用作工具链。

在这个版本中,工具链支持已经被添加到Groovy编译任务中,同时还有以下改进。

按供应商和实施选择工具链
如果您的构建对所使用的JRE/JDK有特定的需求,您可能还想定义工具链的供应商。JvmVendorSpec有一个Gradle认可的知名JVM供应商列表。

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
        vendor = JvmVendorSpec.ADOPTOPENJDK

        // alternativly, use custom matching
        // vendor = JvmVendorSpec.matching("customString")
    }
}

如果厂商不足以选择合适的工具链,你不妨通过虚拟机的实现来筛选。例如,要使用打开J9JVM,通过AdoptOpenJDK,您可以按实现进行筛选,如下例所示。

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(11)
        vendor = JvmVendorSpec.ADOPTOPENJDK
        implementation = JvmImplementation.J9
    }
}

请参考文档了解更多详细信息。

复合构建改进

复合构件是一种将独立的Gradle版本合并成一个版本的方法。每个构建都可以有一个单独的目的(构建逻辑、后端代码、前端代码),并且可以独立工作。

可以为包含的构建执行任务

Gradle现在允许用户直接从命令行执行包含的构建中的任务。例如,如果您的构建包括my-other-project作为包含的构建,并且它有一个子项目sub带着任务foo,然后就可以执行了foo使用以下命令:

gradle :my-other-project:sub:foo

注意,与多项目构建不同,运行gradle build将不运行build所有包含的版本中的任务。你可以介绍任务相关性到生命周期任务如果您想为包含的版本重新创建此行为,请在包含的版本中。

根据IDE的不同,IDE对从包含的版本中执行任务的支持可能还不能完全发挥作用。IntelliJ IDEA和Eclipse Buildship的更新计划完全支持这一点。今天,在IntelliJ IDEA中,您可以创建一个梯度运行配置直接执行任务(就像在命令行上一样)。

现在完全支持构建之间的期望周期

有些情况下,需要在包含的构建之间进行循环。例如,如果两个版本包含需要两个版本的产品代码的端到端测试。这种设置对于单个版本的子项目是可能的,但是在不同版本的项目之间并不完全支持。在这个版本中,这是可能的,只有在以下两者之间存在循环时,Gradle才会失败任务。在ide中导入此类构建的问题也得到修复。

复合构建和结构化软件项目的新文档

Gradle的文档现在包含一个样品用复合构建和一个新的章节来构建软件项目构建软件项目使用复合构件。

依赖性管理改进

一致性依赖解析

Gradle中的依赖关系解析在构建过程中经常发生。从编译代码或运行测试的类路径,到用于静态分析的工具,它们都在某一点上将配置解析为一组依赖项。

然而,这些决议是孤立发生的。有时,为运行时类路径解析的依赖项与为编译类路径解析的依赖项具有不同的版本。这通常发生在仅在运行时存在的可传递依赖关系带来第一级依赖关系的更高版本时。类似地,测试的运行时类路径可以使用与生产代码的编译类路径不同的版本。

为了缓解这个问题,Gradle现在允许您声明依赖配置之间的一致性。例如,在Java生态系统中,您可以编写:

java {
    consistentResolution {
        useCompileClasspathVersions()
    }
}

这告诉Gradle,运行时类路径和编译类路径之间的公共依赖关系应该与编译时使用的版本保持一致。

有许多选项可以配置这个特性,包括在Java生态系统之外使用它,这在用户手册.

储存库的中央声明

在以前的Gradle版本中,用于依赖关系解析的存储库必须为每个(子)项目单独声明。然而,在大多数情况下,每个项目都应该使用相同的存储库。

在Gradle 6.8中,现在可以方便地为整个构建定义存储库settings.gradle(.kts):

dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

这允许Gradle确保您在构建的所有项目中使用相同的存储库来解决依赖关系。通过阅读如何了解更多信息为整个构建声明存储库.

组件元数据规则的集中声明

组件元数据规则是一个强大的工具,可以修复发布在远程存储库上的不良元数据。然而,与存储库类似,规则传统上必须应用于每个项目。从此版本开始,可以在中的中心位置声明组件元数据规则settings.gradle(.kts):

dependencyResolutionManagement {
    components {
        withModule('com.google.guava:guava', GuavaRule)
    }
}

您可以在中了解有关全局声明规则的更多信息用户手册.

锁定梯度设置相关性

依赖性锁定使使用动态版本的构建具有确定性。

到目前为止,您可以从项目或项目构建脚本类路径中锁定依赖项配置。此版本增加了对中锁定配置的支持格拉德勒settings.gradle(.kts):

buildscript {
    configurations.classpath {
        resolutionStrategy.activateDependencyLocking()
    }
}

有关的更多详细信息,请参见文档锁定设置配置.

安全改进

默认情况下,不再启用过期的TLS版本
此版本的Gradle从默认的允许协议列表中删除了TLS协议v1.0和v1.1。在解决依赖关系时,Gradle将不再默认回退到TLS v1.0或v1.1。默认情况下,只允许TLS v1.2或TLS v1.3。

通过手动指定系统属性,可以重新启用这些TLS版本https.protocols用逗号分隔您的版本所需的协议列表。

绝大多数构建应该不需要以任何方式进行更改。Maven Central和JCenter/Bintray2018年停止支持TLS v1.0和TLS v1.1。从Java 7开始,Java就有了TLS v1.2。在Gradle中禁用这些协议可以保护构建免受降级攻击。

根据您使用的Java版本,Gradle在与远程存储库通信时会协商TLS v1.2或TLS v1.3。

注意:JDK 11和JDK 12的早期版本包含中的竞态条件错误TLSv1.3处理逻辑这导致了异常javax.net.ssl.SSLException: No PSK available. Unable to resume。如果您遇到此问题,我们建议您更新到最新的次要JDK版本。

已修复问题

在Gradle 6.8.2中修复了3个问题。

[#16039] - Large performance regression when file system watching is enabled on macOs and Windows
[#16038] - Race condition in optimistic concurrency behaviour of InstrumentingClasspathFileTransformer
[#16037] - Kotlin DSL generated accessors for precompiled scripts should have normalized line endings

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值