Gradle 7.3.3 发布
Gradle团队很兴奋地宣布Gradle 7.3.3。
此次发布引入声明性测试套件API对于JVM项目,添加支持用Java 17构建项目,并更新Scala插件以支持Scala 3.
此外,还会对构建进行更改更可靠,提供下载依赖项时ide的附加细节,提高自定义插件中未跟踪的文件,几个错误修复还有更多。
下载连接:点击进入快速下载
已修复问题
v7.3.3 版本中修复的问题:
- Gradle版本中log4j漏洞的缓解
- 用$ character重命名类名时,增量java编译失败
v7.3.2 版本中修复的问题:
- 考虑恢复有关测试配置的重大更改
- 修复Micronaut发现的多个注释处理问题
v7.3.1 版本中修复的问题:
- 考虑恢复有关测试配置的重大更改
v7.3 版本中修复的问题:
- [#18660] -将未跟踪的注释移动到任务级别
- [#18635] -改进- project-cache-dir与- watch-fs一起使用时的错误消息
- [#18632] -测试套件无法添加版本目录项
- [#18626] - 7.3-rc-1 - project-cache-dir与org.gradle.vfs.watch=true不兼容
- [#18622] -在KMP找不到名为“测试”的源集
- [#18606] - 7.3-rc-1:酝酿测试套件变更会破坏现有的构建
- [#18598] -修复小的JvmTestSuitePlugin文档格式问题
- [#9095] -完全禁用任务的缓存和最新检查
- [#18840] - [Regression]增量注释处理器因“尝试为类型重新创建文件”而失败
- [#19482] -buildprogresslisteneradapter . descriptor cache中的高内存消耗
- [#18559] -Scala 3 Intellij Idea集成中的回归
- [#18506] -使用Scala 3支持Scaladoc
- [#18465] - JDK17 + JUnit中断测试扫描
- [#18460] - Gradle 7.3快照:依赖项任务失败,显示“构建输出清理注册表已完成-无法注册更多输出”
- [#18454] -记录发布依赖于强制平台的库的危险
- [#18412] -配置缓存已损坏:NonSerializableMemoizingSupplier,DefaultJvmInstallationMetadata,JavaToolchain
- [#18388] -实现JvmTestSuite#useTestNG
- [#18387] -为JvmTestSuite#useSpock和#useKotlinTest添加javadoc
- [#18381] -调查测试套件类路径的可能损坏
- [#18324] - gradle依赖于包含CVE漏洞的不安全的第三方JAR包
- [#18294] - VFS无法添加手表,错误= 2
- [#18269] -使DisableCachingByDefault默认为非孵化
- [#18243] -更新现有的测试覆盖以使用新的测试套件API
- [#18241] -向测试套件API的用户手册中添加文档
- [#18239] -支持TestNG和Spock作为测试框架选项
- [#18238] -更新构建初始化以提供基于孵化API的最佳实践的选择加入
- [#18229] -允许平台、强制平台、测试装置和变量的版本目录子访问器
- [#18228] -忽略Java sourcepath编译选项上的空目录
- [#18211] - Scala插件没有从Java target compatibility/tool chain中选择jvm-target
- [#18198] -配置缓存:为java-gradle-plugin项目重用缓存时出现ClassNotFoundException
- [#18167] -在版本目录库中,别名“jme3-plugins”不是有效的别名,在7.1.1中有效,在7.2中无效
- [#18161] -为未跟踪的属性添加更多测试
- [#18160] -记录未跟踪的任务属性
- [#18159] -允许复制任务将其输出标记为未跟踪
- [#18142] -版本目录:插件不支持子访问器和别名重载。
- [#18115] -无法将使用Gradle 7.3快照的项目导入IntelliJ
- [#18079] -依赖关系解析失败,出现“损坏的序列化解析结果”
- [#18068] -允许声明未跟踪的任务属性
- [#18064] -当java-gradle-plugin具有项目依赖性时,配置缓存出现以下问题:pluginUnderTestMetadata
- [#18002] -请记录Kotlin语言与Gradle构建工具版本的兼容性。
- [#17986] -版本目录应该允许用户使用插件后缀配置库
- [#17979] -文件观看不检测更改的文件- Docker运行Windows 2019 server
- [#17974] -文件:增加inotify限制的错误说明
- [#17964] -排除将无法排除重写的依赖项
- [#17882] -使MinimalExternalModuleDependency # toString起作用
- [#17855] -功能解析并不总是按预期应用
- [#17849] -为enforced Platform(Provider < MinimalExternalModuleDependency >)提供覆盖,类似于platform
- [#17829] -多项目构建中不一致的任务选择器行为
- [#17812] - Gradle有时会在任务执行开始时死锁
- [#17803] - Gradle init即使被取消也是破坏性的
- [#17785] -确保“Java tool chain”API与配置缓存兼容
- [#17746] -多级增量注释处理器的性能回归
- [#17563] -动态版本TTL过期后,无法加载配置缓存。
- [#17415] -使用war插件时,providedRuntime被添加到compileClasspath
- [#17039] -升级到Gradle 7.0后出现弃用警告
- [#16857] -支持JDK 17
- [#16527] -支持Scala3
- [#15664] -插件在插件块中的应用顺序应该是确定的
- [#13706] -配置缓存应该捕获输入规范化
- [#12232] -升级到6.0.1或6.1.1后,不断创建崩溃守护程序
- [#11587] - Gradle不应将不存在的路径添加到类路径中
- [#9903] -正确的增量Java/Groovy联合编译
- [#7508] -AbstractStyledTextOutput中的ConcurrentModificationException
- [#8749] -对于idea插件,``添加排除的文件夹不起作用,只有重新分配起作用
- [#18732] -Scala 3的ScalaDoc中断多模块构建
- [#18726] -使用gradle-7.3-rc2和java 17构建时出现NullPointerException
升级说明
通过更新您的包装器,切换您的构建以使用Gradle 7.3.3:
./gradlew wrapper --gradle-version=7.3.3
参见Gradle 7.x升级指南了解升级到Gradle 7.3.3时的弃用、重大变更和其他注意事项。
注意:Gradle 7.3已经三补丁版本,修复了最初版本中的几个问题。我们建议始终使用最新的补丁版本。
关于Java、Groovy、Kotlin和Android兼容性,请参见完全兼容性说明.
新功能和可用性改进
支持Java 17
Gradle现在支持在上运行并使用Java 17.
在以前的Gradle版本中,在Java 17上运行Gradle本身会导致错误。JVM项目本来可以用Java 17构建使用工具链.
从Gradle 7.3开始,完全支持运行Gradle本身和用Java 17构建JVM项目。
JVM项目中的声明性测试套件
当…的时候测试Java和JVM项目,您通常需要将测试类组合在一起,将它们组织成可管理的块,以便您可以以不同的频率或者在构建管道中的不同点运行它们。例如,您可能想要定义以下组单元测试, 集成测试,以及功能测试.
以前,正确地对测试进行分组需要对如何在Gradle中修改和连接各种域对象有透彻的了解,比如源集、配置和任务。如果您想要将测试分成不同的组,您需要理解这些独立的部分是如何相互作用的。
在Gradle 7.3中JVM测试套件插件简化了这类测试组的创建。我们将这些群体称为测试套件。请注意,这不要与测试框架套件相混淆,比如JUnit4的套件.
测试套件是一个高级概念,可以在构建脚本中直接和一致地引用。您可以配置测试所使用的依赖项、源代码和测试框架,而不必担心底层细节。
例如,您可以创建一个集成测试,通过将以下代码片段添加到Java项目来测试套件:
testing {
suites {
// Add a new test suite
integrationTest(JvmTestSuite) {
// Use JUnit Jupiter as a testing framework
useJUnitJupiter('5.7.1')
// depend on the production code for tests
dependencies {
implementation project
}
}
}
}
// Run integration tests as part of check
tasks.named('check') {
dependsOn(testing.suites.integrationTest)
}
这个功能对于所有基于JVM的项目都是自动可用的java插件。内置的test任务已在测试套件上重新实现。查看更多信息用户手册.
这个API是潜伏并且随着更多功能的增加,在未来的版本中可能会有所改变。
Scala 3支持
Scala插件允许用户使用Gradle和Zinc incremental编译器编译他们的Scala代码。
Scala插件现在可以编译Scala 3代码了。所有现有的配置选项应该仍可用于最新的语言版本。
Scala 3的最新版本带来了许多特性,同时保持了与大多数现有Scala 2代码的兼容性。要查看有关语言功能的更多信息,请访问Scala 3新特性概述.
探索新的行为gradle init
当您使用初始化新的Gradle项目时gradle init,Gradle现在会问你是否想在构建中尝试新的但不稳定的特性。这将允许您在新功能变得稳定之前尝试它们。您总是可以通过运行来请求此行为gradle init --incubating生成新项目时。
目前,使用此选项生成的版本只能启用测试套件,但其他新的API或行为可能会随着它们的引入而添加。
版本目录改进
版本目录是一个功能预览这为引用依赖项及其版本提供了一个方便的API。在此版本中,它得到了以下改进。
取消别名的限制
在以前的Gradle版本中,不能用后缀声明别名plugin, version和其他受限制的关键字。随着这一版本的发布,这些限制现已取消。检查证明文件详情请见。
版本目录类型不安全API更改
当使用类型不安全API时,所有接受别名引用现在可以使用与别名定义完全相同的字符串。这意味着您可以声明和引用groovy-json而不是被迫使用groovy.json在类型不安全API中。
请注意,对类型不安全API的访问已经更改,请参见升级指南.
在更多情况下支持一致的版本目录访问器
随着声明别名的可能性越来越多,一些访问器在与插件或依赖声明相关的特定API中不被支持。此版本修复了这些问题,并且可以在更多的上下文中一致地使用访问器。
对于插件,如果你有kotlin.js和kotlin.js.action插件,两者都可以在plugins阻止。
依赖关系声明platform, enforcedPlatform, testFixtures和force支持所有访问器类型。
可靠性改进
更强大的文件系统监控
当运行增量构建时,Gradle需要了解自文件系统上的上一次构建以来发生了什么变化。为此,它依赖于操作系统的文件系统事件只要有可能。
在一些罕见的环境中,这些事件可能是不可靠的,并会导致Gradle忽略一些更改。为了防止这种情况,Gradle现在会在启用基于文件系统事件的优化之前,验证文件系统事件是否及时交付。
允许将单个文件复制到包含不可读文件的目录中。
有时,您希望将文件复制到包含不可读文件的目录中,或者复制到不是由该版本独占的目录中。例如,当您将单个文件部署到应用服务器或安装可执行文件时。
这样做可能会失败或很慢,因为Gradle试图跟踪目标目录中的所有内容。
为了解决这些问题,现在可以使用方法Task.doNotTrackState()在Copy强制Gradle忽略目标目录中的内容的任务。
请参阅用户手册中关于的示例将单个文件部署到应用服务器中和安装可执行文件.
配置缓存中的输入规范化支持
这输入标准化现在被实验者正确地追踪到了配置缓存。当配置缓存启用时,任务最新检查现在会考虑规范化规则,从而加快构建速度。
插件开发改进
使用初始化新的插件项目构建初始化插件也可以受益于这–incubating选择权.
允许插件作者将任务声明为未跟踪
对于最新的检查和构建缓存,Gradle需要跟踪任务输入和输出的状态。Gradle并不总是希望或可能完全跟踪输入和输出文件的状态。
例如:
- 输入或输出位置包含不可读的文件,如管道,Gradle无法跟踪内容。
- 输入或输出被远程存储,例如存储在数据库中,并且其状态无法被跟踪。
- 另一个像Git这样的工具已经负责保持状态,所以Gradle做额外的簿记没有意义。
- 构建并不独占输出位置,Gradle需要跟踪大量内容的状态。
Gradle 7.3引入了注释@UntrackedTask并且该方法Task.doNotTrackState()声明Gradle不应该跟踪任务的状态。这允许任务实现上述用例。
如果一个任务未被跟踪,那么Gradle在运行该任务时不会做任何优化。例如,这样的任务将总是过时的,并且永远不会来自构建缓存。
@UntrackedTask和Task.doNotTrackState是对Task.outputs.upToDateWhen { false }如果希望任务永远不更新。它的优点是速度更快,因为Task.outputs.upToDateWhen { false }仍然花时间捕捉任务状态。
请参阅用户手册中关于的示例集成一个外部工具,它自己进行最新的检查.
工具提供商的改进
工具API允许应用程序嵌入Gradle。IDEA、Android Studio和Buildship等IDE都使用这个API将Gradle集成到IDE中。
文件下载进度事件
当一个构建下载了许多文件或非常大的文件时,例如在解析依赖关系时,Gradle可能会因为缺少任何日志或控制台输出而看起来没有响应。
此版本添加了新的事件,在下载文件时通知IDE。这允许IDE在Gradle运行和IDE导入/同步期间显示更好的进度信息。
安全改进
两者ant和common-compress捆绑库已更新,可解决报告的漏洞。前往升级指南版本和已解决的漏洞。
提升的功能
升级功能是在Gradle的早期版本中酝酿的功能,但现在受到支持并具有向后兼容性。请参阅“用户手册”一节功能生命周期”了解更多信息。
以下是此Gradle版本中提升的功能。
默认情况下禁用缓存
这@DisableCachingByDefault注释现在是一个稳定的特性。