在一小部分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编译?
答案 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
}