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

时间:2016-07-11 03:22:46

标签: java gradle protocol-buffers

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

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

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

为此我试过

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

    //enable incremental compilation
    options.incremental = false
}

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

Parallel execution is an incubating feature.
Incremental java compilation is an incubating feature.
:deleteGeneratedSource
:clean
:extractIncludeProto
:extractProto UP-TO-DATE
:generateProto
:recompileProto

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

2 个答案:

答案 0 :(得分:5)

尝试添加

org.gradle.daemon=false
org.gradle.parallel=false

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

答案 1 :(得分:1)

默认情况下,Gradle中未启用Parrallel构建。就是说,为了显式禁用parrallelism,您可以添加

org.gradle.parallel=false

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


此处的重要说明是,对于某些版本的Gradle(如4.6和4.7等),禁用并行执行无效。 一种解决方法是指定数量非常有限的工作线程。默认情况下,最大工作线程数等于系统处理器的数量。

因此,在项目的gradle.properties中添加值

org.gradle.workers.max=1

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


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

tasks.withType(JavaCompile) {
    options.incremental = false
}