Gradle团队很兴奋地宣布了一个新的主要版本Gradle,8.0。这个主要版本有突破性的变化;请参考Gradle 7.x升级指南寻求指导。
此版本包括对的几项改进科特林DSL。这包括一个解释器来跳过声明性插件的Kotlin编译器,并升级到Kotlin API级。
内置版本的许多好处现在都可以从buildSrc,比如跑步buildSrc直接执行任务,跳过测试,并使用buildSrc。就目前而言,包含的构建仍然有一些优势,这些优势将被合并到buildSrc在未来的版本中。
此外,我们还对配置缓存。这包括通过从缓存条目加载任务并在首次构建时独立运行任务来实现更细粒度的并行性。
下载连接:点击进入快速下载
通过更新您的包装器,切换您的构建以使用Gradle 8.0:
./gradlew wrapper --gradle-version=8.0
参见Gradle 7.x升级指南了解升级到Gradle 8.0时的弃用、重大变更和其他注意事项。
关于Java、Groovy、Kotlin和Android兼容性,请参见完全兼容性说明.
格拉德的科特林DSL为传统的Groovy DSL提供了一种替代语法,在支持的ide中具有增强的编辑体验,提供了卓越的内容帮助、重构、文档等等。
改进的脚本编译性能
Gradle 8.0为声明性插件{}块在.gradle.kts使总体构建时间加快20%左右的脚本。为声明性调用Kotlin编译器plugins {}默认情况下避免使用块。
要利用这种性能,请确保在声明性的plugins {}块,例如:
plugins {
id("java-library") // <1>
id("com.acme.example") version "1.0" apply false // <2>
kotlin("jvm") version "1.7.21" // <3>
}
注意为插件使用版本目录别名(例如plugins { alias(libs.plugins.acme) })或插件规范类型安全访问器(例如plugins { acme-plugin
})不受支持plugins {}块解释程序。这种支持将在以后的版本中添加。
在不支持的情况下,Gradle会退回到Kotlin编译器,提供与以前的Gradle版本相同的性能。
有关插件语法的更多信息,请阅读受限语法.
将Kotlin DSL更新为Kotlin API级
以前,Kotlin DSL使用Kotlin API级。从Gradle 8.0开始,Kotlin DSL使用Kotlin API级。这一变化带来了自Kotlin 1.4.0以来对Kotlin语言和标准库的所有改进。
有关此升级中的重大和非重大变更的信息,请访问升级指南.
增强脚本编译以使用Gradle JVM作为Kotlin JVM目标
以前,汇编的.gradle.kts脚本总是使用Java 8作为Kotlin JVM目标。从Gradle 8.0开始,它现在使用运行构建的JVM版本。
如果您的团队正在使用Java 11来运行Gradle,这允许您在构建脚本中使用Java 11库和语言特性。
请注意,这不适用于预编译脚本插件,见下文。
预编译脚本插件现在使用配置的Java工具链
以前,汇编的预编译脚本插件使用了上配置的JVM目标kotlinDslPluginOptions.jvmTarget.
从Gradle 8.0开始,它现在使用配置的Java工具链,如果没有配置,则为Java 8。
参见kotlin-dsl插件手册有关如何为预编译脚本插件配置Java工具链的更多信息,以及迁移指南了解更多关于行为改变的信息。
此版本包括对的几项改进buildSrc构建的行为更像包含的版本。包含的构建是组织构建逻辑以分离项目配置的另一种方法,以便更好地利用增量构建和任务缓存。现在他们提供同样的好处。
奔跑buildSrc直接任务
现在可以运行buildSrc从命令行构建,使用与包含的构建任务相同的语法。例如,您可以使用gradle buildSrc:build运行build中的任务buildSrc建造。
有关更多详细信息,请参见用户手册
buildSrc可以包括其他版本
这buildSrcbuild现在可以通过在buildSrc/settings.gradle.kts或者buildSrc/settings.gradle。这允许您更好地组织您的构建逻辑,同时仍然使用buildSrc.
你可以用pluginsManagement { includeBuild(someDir) }或者includeBuild(someDir)在此设置脚本中包含其他构建buildSrc.
有关更多详细信息,请参见用户手册
测试buildSrc不再自动运行
当Gradle建立输出buildSrc它只运行产生该输出的任务。它不再运行build任务。特别是,这意味着测试buildSrc并且它的子项目不会在不需要的时候构建和执行。
您可以运行以下测试buildSrc与其他项目一样,如上所述。
初始化脚本适用于buildSrc
在命令行上使用指定的Init脚本–init-script现在应用于buildSrc除了主版本和所有包含的版本之外。
有关更多详细信息,请参见用户手册
这配置缓存通过缓存配置阶段的结果并在后续构建中重用它来缩短构建时间。这是一个可以显著提高构建性能的孵化特性。
首次运行时改进了并行性的配置缓存
配置缓存现在比使用并行执行。从Gradle 8.0开始,当使用配置缓存时,任务从第一个构建开始并行运行。
当它重用一个配置缓存入口。默认情况下,所有任务都是并行运行的,即使是在同一个项目中的任务,也会受到依赖关系的限制。现在,它在存储缓存条目时也会这样做。
当配置缓存启用并且Gradle能够为当前构建找到一个兼容的缓存条目时,它将从缓存中加载任务并独立运行它们。如果Gradle找不到合适的缓存条目,它将运行配置阶段来确定必要的任务,将它们存储在一个新的缓存条目中,然后根据保存的状态立即运行构建。
这种新行为有几个好处:
反序列化期间发生的任何问题都将更容易检测到,因为它们将在缓存未命中构建中报告。
任务在缓存未命中和缓存命中构建中具有相同的状态,允许构建之间的一致性。
在缓存未命中构建中执行任务之前,Gradle可以释放配置状态所使用的内存,从而降低内存使用峰值。
缓存未命中和缓存命中构建之间的这种一致行为将有助于那些过渡到使用配置缓存的人,因为在第一次(缓存未命中)构建时可以发现更多的问题。
有关更多详细信息,请参见用户手册.
改进了与核心插件的兼容性
这gradle init命令可以在启用配置缓存的情况下使用。
这ANTLR插件和Groovy DSL预编译脚本现在与配置缓存兼容。
所有核心Gradle插件的配置缓存支持的当前状态可以在配置缓存文档.
更新的工具链下载库
Gradle 7.6推出工具链仓库增加灵活性。在Gradle 8.0中,不再有默认的工具链供应器。您必须显式声明至少一个Java工具链存储库。这可以通过工具链库插件来完成,比如Foojay工具链插件:
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0")
}
有关更多详细信息,请参见用户手册.
改进的Gradle用户主缓存清理
以前,清理Gradle user home中的缓存使用固定的保留期(30天或7天,具体取决于缓存)。现在可以通过配置这些保留期设置Gradle用户主目录中初始化脚本中的对象。
beforeSettings { settings ->
settings.caches {
downloadedResources.removeUnusedEntriesAfterDays = 45
}
}
此外,以前只能通过org.gradle.cache.cleanupGradle用户主页中的Gradle属性。禁用缓存清理现在会影响Gradle用户主页下的更多缓存,也可以通过设置Gradle用户主目录中初始化脚本中的对象。
有关更多详细信息,请参见用户手册.
增强型警告模式all和fail现在更加冗长
在Gradle 8.0之前,应该打印所有警告的警告模式对于每个特定的警告消息只打印一个。这导致一些警告消息丢失。例如,如果有两个警告具有相同的消息,但来自于构建过程的不同步骤(即不同的堆栈跟踪),则只打印一个。
现在,为消息和堆栈跟踪的每个组合打印一个。这个结果更详细,但也更完整。
有关更多详细信息,请参见用户手册.
改进的依赖性验证元数据
依赖性验证元数据通过确保所使用的依赖项与该依赖项的校验和相匹配,有助于保持项目的安全。这个元数据位于一个XML配置文件中,现在接受一个原因属性。这个原因属性允许更详细地了解为什么一个工件是可信的,或者为什么一个工件需要直接在verification-metadata.xml.
以下节点带有依赖关系验证元数据文件verification-metadata.xml现在支持areason属性:
·的trust下的xml节点trusted-artifacts ·的md5, sha1,
sha256和sha512以下节点component
原因有助于提供关于为什么工件是可信的,或者为什么工件需要直接在verification-metadata.xml.
有关更多详细信息,请参见用户手册.
改进的依赖性验证CLI
为了最小化CI构建与关键服务器通信的次数,我们使用本地密钥环文件。应该经常导出该文件以保持准确性。导出可信密钥时不再需要编写验证元数据,从而简化了流程。
您现在可以使用export-keys用于导出所有已信任密钥的标志:
./gradlew --export-keys
导出可信密钥时,不再需要编写验证元数据。
有关更多详细信息,请参见用户手册.
CodeNarc插件检测Groovy运行时版本
CodeNarc为Groovy项目执行静态分析。它现在发布了单独的版本用于Groovy 4。Gradle目前仍然附带Groovy 3。
为了确保未来的兼容性CodeNarc插件现在自动检测当前Groovy运行时的适当CodeNarc版本。
属性,您仍然可以显式指定CodeNarc版本toolVersion上的属性代码扩展.
默认情况下,并行执行增强的PMD任务
这PMD插件使用静态代码分析器对项目的Java源文件进行质量检查。它现在使用Gradle工作API和JVM工具链。该工具现在通过外部工作进程执行分析,因此它的任务现在可以在一个项目中并行运行。
在Java项目中,该工具将使用项目所需的相同版本的Java。在其他类型的项目中,它将使用与Gradle守护进程相同的Java版本。
有关更多详细信息,请参见用户手册.
升级功能是在Gradle的早期版本中酝酿的功能,但现在受到支持并具有向后兼容性。请参阅“用户手册”一节功能生命周期”了解更多信息。
以下是此Gradle版本中提升的功能。
这GradleConnector.disconnect()方法现在被认为是稳定的。
这AntlrSourceDirectorySet接口现在被认为是稳定的。
这Ear.getAppDirectory()方法现在被认为是稳定的。
这EclipseClasspath.getContainsTestFixtures()方法现在被认为是稳定的。
以下类型和方法现在被认为是稳定的:
GroovySourceDirectorySet
GroovyCompileOptions.getDisabledGlobalASTTransformations()
这ScalaSourceDirectorySet接口现在被认为是稳定的。
这War.getWebAppDirectory()方法现在被认为是稳定的。
这些方法Settings.dependencyResolutionManagement(Action)和Settings.getDependencyResolutionManagement()现在已经稳定了。
中的所有方法DependencyResolutionManagement现在稳定了,除了中央存储库声明。
208个问题在Gradle 8.0中得到修复。
javatoolchainfactory # new instance
静默丢弃原始异常-U
是- refresh-dependencies
的缩写形式groovy . util . ant builder
→` groovy . ant . ant builder ’