在一小部分 sbt 项目中,我们需要 protobuf/grpc 编译,并且因为只有 Gradle 对此有正常支持,所以我们用它来执行 protobuf 相关任务。
有时它会随机失败编译相同的东西,但重试时会成功,我们确定这是因为增量 Java 编译。
我想禁用各种孵化功能和增量编译,我希望这件事是确定性的。
为此我尝试过
compileJava {
//enable compilation in a separate daemon process
options.fork = false
//enable incremental compilation
options.incremental = false
}
但 Gradle 仍然会给出这样的输出(显然忽略了这些标志)
Parallel execution is an incubating feature.
Incremental java compilation is an incubating feature.
:deleteGeneratedSource
:clean
:extractIncludeProto
:extractProto UP-TO-DATE
:generateProto
:recompileProto
那么我们如何禁用并行执行和增量Java编译呢?
Gradle 中默认未启用并行构建。也就是说,为了明确禁用并行性,您可以添加
org.gradle.parallel=false
到您项目的 gradle.properties 文件或指定--无并行启动构建的 gradle/gradlew 命令的选项。
重要提示在这里问题是,对于 Gradle 的某些版本(例如 4.6 和 4.7 等),禁用并行执行不起作用。解决方法是指定非常有限数量的工作线程。默认情况下,最大工作线程数等于系统处理器的数量。
所以在项目的gradle.properties中添加值
org.gradle.workers.max=1
为了将并发工作线程的数量限制为 1 或指定选项--最大工人=1到启动构建的 gradle/gradlew 命令。
Gradle 4.10之前的版本默认不启用增量构建。对于 4.10 之后的版本,您可以将以下内容添加到 build.gradle(最有可能添加到多模块项目中的顶层),以禁用增量 Java 编译:
tasks.withType(JavaCompile) {
options.incremental = false
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)