Gradle Task 任务之间是可以配置依赖的,那么为什么要配置依赖?
因为任务有可能依赖其他任务执行完毕之后,才可以开始执行。对于这种情况,我们就可以通过任务的依赖来控制。
下面来介绍一下任务的依赖方式。
Task 之间的依赖关系可以在以下几部分设置:
下面我们定义 task A、task B,其中 task C 依赖 A B 两个任务执行完毕后,才执行,如下:
// 任务的依赖方式
// 方式一:参数方式依赖
task A {
doLast {
println "TaskA.."
}
}
task 'B' {
doLast {
println "TaskB.."
}
}
//参数方式依赖: dependsOn后面用冒号
task 'C'(dependsOn: ['A', 'B']) {
doLast {
println "TaskC.."
}
}
执行如下:
1685978271258
在上面我们将 任务的依赖写在参数上,其实还可以写在 任务内部,如下:
//参数方式依赖: dependsOn后面用冒号
task 'C' {
//内部依赖:dependsOn后面用 = 号
dependsOn = ['A', 'B']
doLast {
println "TaskC.."
}
}
执行如下:
gradle C
1685978663428
// 外部依赖:可变参数,引号可加可不加
C.dependsOn(B,'A')
完整 task C 代码如下:
//参数方式依赖: dependsOn后面用冒号
task 'C' {
doLast {
println "TaskC.."
}
}
// 外部依赖:可变参数,引号可加可不加
C.dependsOn(B, 'A')
执行如下:
gradle C
1685978975517
“当然:task 也支持跨项目依赖 ”
在subproject01 工程的 build.gradle 文件中定义:
// 在subproject01定义task
task subTaskA {
doLast(){
println("subTaskA")
}
}
1685979230684
在subproject02 工程的 build.gradle 文件中定义:
// 在subproject02定义task
task subTaskB {
//依赖根工程下的subject01中的任务subTaskA :跨项目依赖。
dependsOn(":subproject01:subTaskA")
doLast(){
println("subTaskB")
}
}
可以从结果来看,跨模块项目的 gradle task 是可以相互依赖的。
拓展 1:当一个 Task 依赖多个Task 的时候,被依赖的Task 之间如果没有依赖关系,那么它们的执行顺序是随机的,并无影响。
拓展 2:重复依赖的任务只会执行一次,比如:
A->B、C
B->C
任务A 依赖任务 B 和任务 C、任务 B 依赖C 任务。执行任务A 的时候,显然任务C 被重复依赖了,C 只会执行一次。