Gradle 7.1.1 发布
Gradle团队很高兴宣布Gradle 7.1.1。
这个版本修订了增量Java编译并使它更容易配置Groovy、Scala和Antlr源集在科特林DSL。
下载连接:点击进入快速下载
已修复问题
Gradle 7.1.1 是 Gradle 7.1 的补丁版本,它修复了以下3个问题:
[#17548] -[配置缓存SantaTracker的任务不是最新的
[#17542] -[配置缓存]过滤的FC映射的元素存储不正确
[#17488] -许多Micronaut构建在NPE的Gradle 7.1和JDK 8中失败
改进的Java增量编译
格雷尔有一个Java增量编译器默认情况下启用,通过只编译需要编译的Java源文件来加快增量编译。
Java增量编译器在这个版本中得到了实质性的改进。
增量编译分析现在存储在构建缓存中
在以前的Gradle版本中,增量编译分析只存储在本地。这意味着当编译任务的输出从构建缓存,后续的构建不能进行增量编译,总是需要完全重新编译。
在Gradle 7.1中,增量分析的结果现在存储在构建缓存中,从构建缓存中提取后的第一次编译将是增量的。
增量编译分析速度更快,使用的内存和磁盘空间更少
增量编译分析需要Gradle从类文件中提取符号,并分析依赖关系的传递图,以确定特定符号的使用者。这会消耗大量内存和时间。
Gradle 7.1显著降低了增量编译分析的成本,以及分析的规模。
这种变化的影响因项目而异,但非常明显。在Gradle项目本身上,我们能够以两倍的速度进行增量编译!
对常数的更改不再触发完全重新编译
最后,由于Java编译器的工作方式,以前的Gradle版本被迫在任何的上游依赖项中的常量已更改。
Gradle 7.1引入了一个编译器插件,该插件执行常量使用情况跟踪,并且只在常量改变时才重新编译常量的消费者。
这可以加速使用大量常量的项目的增量构建,这对于从模板引擎生成的代码来说是很常见的。
Kotlin DSL中更简单的源集配置
使用Kotlin DSL时,在为Java以外的语言配置源位置时,需要一个特殊的构造。例如,下面是您将如何配置groovy来源:
sourceSets {
main {
withConvention(GroovySourceSet::class) {
groovy {
setSrcDirs(listOf("src/groovy"))
}
}
}
}
Gradle 7.1在以下插件中为每种语言定义了源集的扩展:
- groovy
- antlr
- scala
这意味着Kotlin DSL可以访问自动生成的访问器和withConvention不再需要:
sourceSets {
main {
groovy {
setSrcDirs(listOf("src/groovy"))
}
}
}
为编译任务构建缓存友好的命令行参数
使用声明编译器守护程序的参数时jvmArgs,这些参数总是被视为String编译任务的输入。
有时,这些参数表示需要作为构建缓存键的一部分捕获的文件的路径。将这些参数建模为输入文件可以提高编译任务的增量,并避免不必要的缓存缺失。
以前,Java编译器调用的参数可以在编译器参数提供程序,但是对于编译器守护进程本身的命令行参数,没有办法做到这一点。现在,您可以为编译器守护程序提供命令行参数JavaCompile, GroovyCompile,以及ScalaCompile任务使用jvmArgumentProviders.
CommandLineArgumentProvider通过配置的对象jvmArgumentProviders将被询问输入和/或输出注释,Gradle将把这些添加到各自的任务中。
def javaAgent = objects.newInstance(JavaAgent)
javaAgent.jarFile = file('some/path/to/agent.jar')
// This can be done with Groovy, Java or Scala compilation
tasks.withType(GroovyCompile).configureEach {
groovyOptions.forkOptions.jvmArgumentProviders.add(javaAgent)
}
abstract class JavaAgent implements CommandLineArgumentProvider {
@Classpath
abstract RegularFileProperty getJarFile()
@Override
List<String> asArguments() {
def jarFilePath = jarFile.get().asFile.absolutePath
return ["-javaagent:${jarFilePath}".toString()]
}
}
JaCoCo插件支持Java 15/16
JaCoCo插件已升级到最新版本JaCoCo版本0.8.7其中包括对Java 15和16的支持以及对Java 17的实验性支持。