在一小组 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 命令指定 --no-parallel 选项。
此处重要说明,对于某些版本的 Gradle,如 4.6 和 4.7 以及其他版本,禁用并行执行不起作用。 解决方法是指定数量非常有限的工作线程。默认情况下,最大工作线程数等于系统处理器的数量。
所以在项目的gradle.properties中添加值
org.gradle.workers.max=1
为了将并发工作线程的数量限制为 1 或指定选项 --max-workers=1 到启动构建的 gradle/gradlew 命令。
在 Gradle 4.10 之前的版本中,默认不启用增量构建。对于 4.10 之后的版本,您可以将以下内容添加到您的 build.gradle(最有可能添加到多模块项目中的顶层)以禁用增量 Java 编译:
tasks.withType(JavaCompile) {
options.incremental = false
}
关于java - Gradle 禁用所有增量编译和并行构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298695/