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

标签 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
}

但是 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/

相关文章:

c++ - 如何在 C++ 中从 protobuf 时间戳重建日期

java - 重用 ObjectInputStream 会抛出 StreamCorruptedException

java - java 句子中的单词字母反转

apache-spark - 如何将行映射到 protobuf 生成的类?

android - Mapbox-导入 “com.mapbox.services.android.telemetry”包内的类时出错

android - Android Gradle排除无法正常工作

python - 如何在 Tensorflow 中显示隐藏层输出

java - Coinbase Pro 和沙盒登录端点

java - SoapMessage 的来源(用于读取 UserToken)

java - 如何在gradle中执行或构建子项目之前执行任务?