Ответ 1
Попробуйте добавить
org.gradle.daemon=false
org.gradle.parallel=false
к файлу gradle.properties
, он может помочь вам в вашей проблеме.
В небольшом наборе проектов 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?
Попробуйте добавить
org.gradle.daemon=false
org.gradle.parallel=false
к файлу gradle.properties
, он может помочь вам в вашей проблеме.
Параллельное построение не включено по умолчанию в Gradle. Тем не менее, чтобы явно отключить параллелизм, вы можете добавить
org.gradle.parallel=false
в свой проект gradle.properties или укажите параметр --no -rallel для команды gradle/gradlew, которая запускает сборку.
Важным примечанием здесь является то, что для определенных версий Gradle, таких как 4.6 и 4.7 и других, отключение параллельного выполнения не работает. Обходной путь - указать очень ограниченное количество рабочих потоков. По умолчанию максимальное количество рабочих потоков равно числу ваших системных процессоров.
Поэтому в проекте gradle.properties добавьте значение
org.gradle.workers.max=1
чтобы ограничить число одновременных рабочих потоков до 1 или указать параметр --max-worker = 1 для команды gradle/gradlew, которая инициирует сборку.
В версиях, предшествующих Gradle 4.10, добавочное построение не включено по умолчанию. Для версий после 4.10 вы можете добавить следующее в свой build.gradle (скорее всего, в файл верхнего уровня в многомодульном проекте), чтобы отключить инкрементную компиляцию Java:
tasks.withType(JavaCompile) {
options.incremental = false
}