taskB mustRunAfter taskA或taskB dependsOn taskA,似乎taskA先运行,然后taskB运行。有什么区别?
答案 0 :(得分:22)
例如:
tasks.create('a')
tasks.create('b').dependsOn('a')
tasks.create('c')
tasks.create('d').mustRunAfter('c')
dependsOn
- 设置任务依赖关系。在此执行b
将要求首先执行a
。mustRunAfter
- 设置任务排序。执行d
不需要c
。但是,如果同时包含c
和d
,c
将在d
之前执行。答案 1 :(得分:1)
有时它们具有相同的效果。例如,如果taskC依赖于taskA和taskB,那么taskB依赖于taskA或mustRun是否无关紧要 - 当你运行taskC时,顺序将是taskA,taskB,taskC。
但是如果taskC仅依赖于taskB,那么就会有所不同。如果taskB依赖于taskA,那么它与上面的相同 - taskA,taskB,taskC。如果taskB只是必须在任务A之后运行,那么taskA就不会运行,并且运行taskC将运行taskB,然后运行taskC。
mustRunAfter真正意味着如果taskA全部运行,那么taskB必须在它之后运行。
答案 2 :(得分:0)
通常,如果顺序很重要,则看来您同时需要dependsOn和mustRunAfter。这是一个运行两个任务的示例,一个任务(自定义注册的“ importUnicodeFiles”任务)在“ this”项目中,另一个(预定义的“ run”任务)在一个名为“:unicode”的同级项目中:
tasks.register("rebuildUnicodeFiles") {
description = "Force the rebuild of the `./src/main/resources/text` data"
val make = project(":unicode").tasks["run"]
val copy = tasks["importUnicodeFiles"]
dependsOn(make)
dependsOn(copy)
copy.mustRunAfter(make)
}
答案 3 :(得分:0)
扩展mkobit的回答:
mustRunAfter
mustRunAfter
控制在命令行上显式指定的任务的执行顺序,但不创建对其他任务的隐式依赖。给定 taskA
和 taskB
:
build.gradle.kts
val taskA by tasks.registering {
doLast {
println("taskA")
}
}
val taskB by tasks.registering {
doLast {
println("taskB")
}
}
taskB {
mustRunAfter(taskA)
}
然后
gradle taskB taskA
执行 taskA
后跟 taskB
;gradle taskA
只执行 taskA
;gradle taskB
仅执行 taskB
。dependsOn
dependsOn
创建对其他任务的隐式依赖。给定相同的两个任务:
taskB {
dependsOn(taskA)
}
然后
gradle taskB
执行 taskA
后跟 taskB
;gradle taskB taskA
执行 taskA
后跟 taskB
;gradle taskA
仅执行 taskA
。mustRunAfter
和 dependsOn
接受 unordered collection of tasks。鉴于:
val taskC by tasks.registering {
doLast {
println("taskC")
}
}
taskC {
dependsOn(taskA, taskB)
}
然后 gradle taskC
以无保证的顺序执行 taskA
和 taskB
,然后是 taskC
(假设没有其他 dependsOn
或 mustRunAfter
声明) .
mustRunAfter
还控制相互依赖的任务之间的执行顺序,否则这些任务将没有保证的顺序。鉴于:
taskB {
mustRunAfter(taskA)
}
then gradle taskC
执行 taskA
后跟 taskB
后跟 taskC
,但 gradle taskB
只执行 taskA
,因为 taskB 没有 {{1 }}。
dependOn(taskA)
确保 taskA { finalizedBy(taskB) }
执行 gradle taskA
后跟 taskA
;taskB
提供比 shouldRunAfter
、useful for breaking cyclic dependencies and parallel task execution 更弱的排序保证。有关以下方面的更多信息,请参阅 Gradle 文档: