Gradle禁用所有增量编译和并行构建

vac*_*ach 13 java protocol-buffers gradle

在一小部分sbt项目中,我们需要一个protobuf/grpc编译,因为只有gradle有正常的支持,我们用它来执行与protobuf相关的任务.

有时它会随机地失败编译同样的东西并且会在重试时成功,我们确定它是因为增量的java编译.

我想禁用各种孵化功能和增量编辑,我希望这个东西是确定性的.

为此我试过

compileJava {
    //enable compilation in a separate daemon process
    options.fork = false

    //enable incremental compilation
    options.incremental = false
}
Run Code Online (Sandbox Code Playgroud)

但gralde仍会提供这样的输出(显然忽略了那些标志)

Parallel execution is an incubating feature.
Incremental java compilation is an incubating feature.
:deleteGeneratedSource
:clean
:extractIncludeProto
:extractProto UP-TO-DATE
:generateProto
:recompileProto
Run Code Online (Sandbox Code Playgroud)

那么我们如何禁用并行执行和增量java编译呢?

tom*_*kab 8

Gradle 中默认不启用并行构建。也就是说,为了明确禁用并行性,您可以添加

org.gradle.parallel=false
Run Code Online (Sandbox Code Playgroud)

到您项目的 gradle.properties 文件,或为启动构建的 gradle/gradlew 命令指定--no-parallel选项。


这里的重要说明是,对于某些版本的 Gradle,例如 4.6 和 4.7 以及其他版本,禁用并行执行不起作用。一种解决方法是指定数量非常有限的工作线程。默认情况下,最大工作线程数等于系统处理器的数量。

所以在项目的 gradle.properties 添加值

org.gradle.workers.max=1
Run Code Online (Sandbox Code Playgroud)

为了将并发工作线程的数量限制为 1,或者为启动构建的 gradle/gradlew 命令指定选项--max-workers=1


在 Gradle 4.10 之前的版本中,默认情况下不启用增量构建。对于 4.10 之后的版本,您可以将以下内容添加到 build.gradle(最有可能添加到多模块项目中的顶级)以禁用增量 Java 编译:

tasks.withType(JavaCompile) {
    options.incremental = false
}
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试添加

org.gradle.daemon=false
org.gradle.parallel=false
Run Code Online (Sandbox Code Playgroud)

gradle.properties文件,它可以帮助您解决问题.

  • 这不适用于Gradle 4.6。甚至这里提到的解决方案(https://github.com/gradle/gradle/issues/1827)都不起作用。 (4认同)