让我们假设一个插件创建以下任务图:
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