java - Gradle 任务在应该并行运行时却没有并行运行

标签 java gradle groovy parallel-processing

我有一个 gradle 任务依赖于其他 4 个任务。首先是一个“组装”任务,它基本上应该构建我的项目的所有子项目(我有一个多项目结构)。效果很好。

后面三个都是简单的复制任务。我希望这三个任务在“assemble”任务完全完成后彼此并行运行,因此我为每个任务添加了“mustRunAfter”。然而,任务似乎只是一个接一个地运行,而不是并行运行。

task parallelTask(dependsOn: ['assemble', 'copyOne', 
'copyTwo', 'copyThree']) {
    copyOne.mustRunAfter(assemble)
    copyTwo.mustRunAfter(assemble)
    copyThree.mustRunAfter(assemble)
}

此外,我还在我的 gradle.properties 中添加了 org.gradle.parallel=true

我认为问题可能出在“mustRunAfter”注释上,因此我创建了一个单独的任务,它取决于所有复制任务,如下所示:

task copyAll(dependsOn: ['copyOne', 
'copyTwo', 'copyThree']) {
}
task parallelTask(dependsOn: ['assemble', 'copyAll']) {
    copyAll.mustRunAfter(assemble)
}

但是,现在复制任务似乎与“assemble”同时开始,而不是等待“assemble”完成,这是我无法做到的。

我需要在项目的所有子项目的“组装”完全完成后并行运行复制任务。

谢谢。

最佳答案

mustRunAfter 不会做出任何并行执行的 promise ,这是预期的行为。所有这些都表明:

copyOne.mustRunAfter(assemble)
copyTwo.mustRunAfter(assemble)
copyThree.mustRunAfter(assemble)

assemble 将在其他三个任务之前运行,并且这三个任务将以某种未定义的顺序执行,例如 copyThree 可能会在其他三个任务之前运行copyOne 或任何其他订单。

如果您希望任务明确并行运行,那么您需要告诉 Gradle,Gradle 本身不会这样做。

看看这个:

https://discuss.gradle.org/t/using-parallelizabletask/14634

您需要声明任务类型:类型:ParallelTask​​。但是我对这种特定类型没有太多经验。

关于java - Gradle 任务在应该并行运行时却没有并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57310095/

相关文章:

java - 如何使用 cPanel 安装 Jenkins?

ant - 从控制台构建Eclipse RCP时,为什么会得到 '[eclipse.brand] Could not find executable to brand'?

gradle - Gradle多项目,范围任务

jenkins - 使用 FilePath 访问 Jenkins 管道中从属设备上的工作区

hibernate - 使用GORM进行多次链式保存

java - 用户空间自动装箱?

java - 安卓工作室 : Warning while I try to move Class to another package

java - 将 logback classic 与 gradle 结合使用时无法加载 logback 配置

java - Groovyc 和 Java 12 预览功能

一台机器上的 javax.net.ssl.SSLHandshakeException,但另一台机器上没有