交换gradle插件的任务

时间:2019-09-04 12:12:56

标签: gradle

让我们假设一个插件创建以下任务图:

A -> B -> C

A取决于B,后者取决于C

如何将任务B与另一个任务(比如说X)交换来获得这样的任务图?

A -> X -> C

实际上,我必须解决此问题的想法是获得B所依赖的所有任务的列表以及所有具有B作为依赖项的所有任务的列表。可以在图形准备就绪时完成此操作。

task C {
    doLast {
        println('Task C')
    }
}

task B {
    doLast {
        println('Task B')
    }
    dependsOn C
}

task A {
    doLast {
        println('Task A')
    }
    dependsOn B
}

gradle.taskGraph.whenReady { graph ->
    ext.b_dependsOn = graph.allTasks.findAll { it.name == 'B' }.each {
        println("Found task $it.name")
        println("which dependsOn: $it.dependsOn")
    }

    task X {
        doLast {
            println('Task X')
        }
        dependsOn b_dependsOn
    }

    ext.other_dependsOn_b = graph.allTasks.findAll { it.dependsOn.findAll { it.name == 'B' } }.each {
        println("Found a task that dependsOn B: $it.name")
        it.dependsOn X
    }
}

然后下一步是使任务X依赖于B的任务,并使所有具有B作为依赖关系的其他任务都依赖于X

现在,当我执行gradle a时,X不会替换B。为什么?

这里是gradle执行的输出:

$ gradle a
Found task B
which dependsOn: [task ':C']
Found a task that dependsOn B: A

> Task :C
Task C

> Task :B
Task B

> Task :A
Task A

0 个答案:

没有答案