Gradle-7.0.2 发布
Gradle团队很兴奋地宣布一个新的主要版本的Gradle,7.0。
此版本支持默认情况下文件系统监视为了使您的增量构建更快,扩展了对用Java 16构建项目,并增加了对基于使用苹果硅处理器(如M1)的MAC电脑.
此版本还引入了的功能预览集中式依赖版本,启用构建验证错误使您的构建更加可靠,并且更容易为设置文件创建约定插件。许多孵化功能已被提升为稳定.
这些发行说明仅列出了自Gradle 6.8以来的新增内容。您还可以看到Gradle 6.0到7.0之间所有变化的亮点.
下载连接:点击进入快速下载
新功能和可用性改进
苹果芯片的原生支持
以前的Gradle版本可以在苹果硅处理器的新MAC上运行,但有一些缺点:
- 与一个原生的手臂JDK,格雷尔的特点一样丰富的控制台和文件系统监视会被禁用。
- 有了英特尔JDK,Gradle在Rosetta2兼容层上的运行速度只有一半。
在此版本中,现在使用原生ARM JDK支持所有功能。如果你使用苹果芯片的新Mac,你应该使用Gradle和原生ARM JDK以获得最佳性能。
支持Java 16
Gradle现在支持在上运行并使用Java 16.
在以前的Gradle版本中,在Java 16上运行Gradle本身会导致错误。JVM项目可以使用Java 16构建工具链但是只能禁用增量编译。
从Gradle 7.0开始,无论是运行Gradle本身,还是用Java 16构建JVM项目,都是完全支持的。
集中式依赖版本
在多项目构建中,有多种方法可以在项目之间共享依赖项版本。例如,用户可以直接在构建脚本(在ext块)、外部文件(例如dependencies.gradle),在buildSrc甚至是专用插件。然而,什么也没有标准这种机制将结合每种方法的优点。
在此版本中,Gradle引入了版本目录作为一个实验特征。版本目录使构建作者能够将他们的第三方依赖项的依赖项坐标(组、工件、版本)集中在一个常规的配置文件中,并以类型安全的方式声明实际的依赖项。
为了启用这个实验特性,在您的settings.gradle(.kts)文件:
enableFeaturePreview("VERSION_CATALOGS")
然后,您可以使用gradle/libs.versions.toml文件来声明目录内容:
[versions]
groovy = "3.0.5"
[libraries]
groovy-core = { module = "org.codehaus.groovy:groovy",
version.ref = "groovy" }
groovy-json = { module = "org.codehaus.groovy:groovy-json",
version.ref = "groovy" }
groovy-nio = { module = "org.codehaus.groovy:groovy-nio",
version.ref = "groovy" }
commons-lang3 = { group = "org.apache.commons",
name = "commons-lang3",
version = { strictly = "[3.8,4.0[", prefer="3.9" } }
[bundles]
groovy = ["groovy-core", "groovy-json", "groovy-nio"]
之后,在任何子项目的任何构建脚本中,您可以使用类型安全的访问器来声明依赖项:
dependencies {
implementation libs.bundles.groovy
implementation libs.commons.lang3
}
以这种方式声明依赖关系允许在所有模块中容易地重用依赖关系坐标,在ide中提供内容帮助,并降低输入错误的风险。更重要的是,它还提供了在升级库时更改版本的单一位置。
此外,经常一起使用的依赖项可以组织成包,并在相关项目中用一行代码声明。目录也可以在不同的构建之间共享。
对于插件作者或更高级的用例,可以从Settings声明版本目录。
注意
该特性旨在集中声明,对依赖关系解析过程没有影响。这意味着已解析的版本仍然可以不同于版本目录中声明的版本。例如,如果可传递依赖项需要更高的版本,则依赖项的解析版本可以高于目录中声明的版本。
涉及文档了解更多详情。
类型安全的项目访问器
在Gradle 7.0之前,在多项目构建中声明项目间依赖关系的唯一方式是使用字符串表示法,例如project(“:some:path”).
这个版本的Gradle为项目访问器增加了一个实验性的特性,它提供了类型安全并支持ide中的代码完成。
为了启用这个实验特性,请将这一行添加到您的settings.gradle(.kts)文件:
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
带有路径的项目:client将可以使用以下符号进行访问:
dependencies {
// type-safe alternative to project(":client")
implementation projects.client
}
具有更多嵌套层次的项目,如:commons:utils:numbers将可以使用以下符号进行访问:
dependencies {
// type-safe alternative to project(":commons:utils:numbers")
implementation projects.commons.utils.numbers
}
请参考证明文件了解更多详情。
Groovy 3升级
为了支持JDK 16并与最新的Groovy版本保持同步,Gradle已经升级到在Groovy DSL构建脚本中使用Groovy 3。Groovy 3附带了一个新的解析器和许多其他新特性和功能,使得与新Java特性的互操作性变得更加容易。
Groovy 2和3之间存在一些不兼容性,这可能会导致升级到Gradle 7.0时出现问题。
在以下情况下,您可能会受到Groovy升级的影响:
- 您将Groovy DSL用于您的构建脚本(.gradle文件)
- 您正在使用Groovy中实现的Gradle插件
- 您正在构建一个用Groovy实现的Gradle插件
在以下情况下,您不会受到升级的影响:
- 您只使用Kotlin DSL(.gradle.kts文件)
- 您仅将Groovy用于您的生产代码(您可以选择您需要的Groovy版本)
请参考Gradle升级指南了解更多关于升级构建和插件以兼容Groovy 3的信息。
为了了解更多关于Groovy 3.0中的改进和新特性,请参考Groovy项目的发行说明.
依赖性锁定改进
依赖性锁定是一种在使用动态依赖版本时确保可重现构建的机制。
该版本默认为改进的依赖锁定文件格式这导致使用该特性的大多数项目中的锁文件较少。具体来说,它导致每个项目一个文件,而不是每个项目每个配置一个文件。
Gradle将自动清理以前的锁文件,当迁移它们转换到新的文件格式。
此外,当使用新格式时,可以配置锁定文件名和位置。
在插件块中使用动态版本
直到现在plugins { }block仅支持社区插件的固定版本。全部Gradle支持的版本字符串表示法现已被接受,包括+或者latest.release.
我们建议使用plugins {}使用Gradle 7应用插件的块。老人apply plugin:机制将来会被弃用。
请注意,动态版本会在您的构建过程中引入不确定的行为,应该谨慎使用。你可以用依赖性锁定保存使用动态版本时解析的依赖项集。