【发布时间】:2019-10-19 05:56:43
【问题描述】:
在一小部分 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 和 sbt,两者都让生活变得更加复杂...... maven 摇滚它而不会给你太多麻烦,是的,它需要更长的时间来构建,但 intellij 不依赖 maven 或 sbt 或gradle 自行完成增量快速编译...因此其他构建工具的好处是值得怀疑的...在开发时您不需要使用 mvn 进行编译...对于复杂的脚本,我们几乎没有 kotlin 函数可以完成所有这些工作花哨的构建工具应该用更少的精力和更大的灵活性来做......
-
@robin-green:既然你已经开始在这个问题上悬赏,你能否详细说明什么是你可以接受的答案? TBH,我发现原来的问题相当模糊;我什至不知道当前接受的答案如何在某个时候回答这个问题……也许是因为我自己并没有面临这样的不确定性;你能提供一个 minimal reproducible example 来展示偶尔的不确定性吗?
-
我的用例与 OP 的用例不同,但我仍然想禁用 gradle 运行中的所有并行性——最好是所有分叉进程——或者如果不是,那么所有同时运行的分叉进程正在运行 JUnit 测试。
标签: java gradle protocol-buffers