当并行,正常任务混合在一起时,并行任务执行会中断顺序

时间:2017-02-17 08:05:13

标签: gradle groovy parallel-processing

apply plugin: 'java'

task taskA <<{
    println 'task A'
}

task taskB (type:P){
    namee='B'
}

task taskC (type:P){
    namee='C'
}

@ParallelizableTask
class P extends DefaultTask {
    String namee

    @TaskAction
    def broccoliBuild() {
        println "Task "+namee
    }
}

task taskBC (dependsOn:['taskB','taskC'])<<{
    println 'BC'
}
taskBC.mustRunAfter taskA

task taskD <<{
    println'task D'
}
taskD.mustRunAfter taskBC

task taskE (type:Qtask){
    nname='E'
}

task taskF (type:Qtask){
    nname='F'
}

@ParallelizableTask
class Qtask extends DefaultTask {
    String nname

    @TaskAction
    def broccoliBuild() {
        println "Task "+nname
    }
}

task taskEF (dependsOn:['taskE','taskF'])<<{
    println 'task EF'
}
taskEF.mustRunAfter taskD

task main(dependsOn: ['taskA','taskBC','taskD','taskEF'])<<{
    println 'Build Completed'
}

当我以并行模式执行主任务时:

  

gradle main --parallel -Dorg.gradle.parallel.intra = true

taskEFtaskBC一起执行(两者都是并行任务),违反了我提到的流程。 taskD必须在taskEF之前执行(我已经使用过mustRunAfter)。

任何人都可以帮助我解决这个问题。 (使用Gradle 2.12)

1 个答案:

答案 0 :(得分:0)

在您的build.gradle文件的内容之后添加wrapper任务:

task wrapper(type: Wrapper) {
    gradleVersion = '2.12'  
}

我运行了以下命令:gradlew wrapper然后检查了版本,显示我正在运行预期的 Gradle 2.12 版本

E:\Data\Test>gradlew --version

------------------------------------------------------------
Gradle 2.12
------------------------------------------------------------

Build time:   2016-03-14 08:32:03 UTC
Build number: none
Revision:     b29fbb64ad6b068cb3f05f7e40dc670472129bc0

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_111 (Oracle Corporation 25.111-b14)
OS:           Windows 10 10.0 amd64

然后,运行您提供的命令,结果如下:

E:\Data\Test>gradlew main --parallel -Dorg.gradle.parallel.intra=true

Parallel execution is an incubating feature.
:taskA
task A
:taskB
:taskC
:taskE
:taskF
Task C
Task B
Task F
Task E
:taskBC
BC
:taskD
task D
:taskEF
task EF
:main
Build Completed

BUILD SUCCESSFUL

Total time: 2.609 secs

因此,使用Gradle 2.12输出会按预期运行,而taskEF会在taskBC之后正确运行。

您似乎没有运行您想要的正确Gradle版本,或者您实际运行的build.gradle版本与您在此处提供的版本不同。

作为旁注:我建议总是使用我所示的包装器任务运行Gradle,这样可以快速更新或选择特定的Gradle版本。