什么';Gradle中mustRunAfter和dependsOn的区别是什么?
无论taskB必须在taskA之后运行,还是taskB依赖于taskA,似乎taskA先运行,taskB再运行。有什么区别吗?有时它们有相同的效果。例如,如果taskC依赖于taskA和taskB,则taskB依赖于taskA还是必须在其之后运行并不重要-当您运行taskC时,顺序将为taskA、taskB、taskC 但如果taskC仅依赖于taskB,则存在差异。如果taskB依赖于taskA,那么它与上面的taskA、taskB、taskC相同。如果taskB仅在taskA之后运行,则taskA不运行,而运行taskC将运行taskB,然后taskC运行 mustRunAfter实际上意味着如果taskA运行,那么taskB必须在其之后运行。例如:什么';Gradle中mustRunAfter和dependsOn的区别是什么?,gradle,dependencies,task,Gradle,Dependencies,Task,无论taskB必须在taskA之后运行,还是taskB依赖于taskA,似乎taskA先运行,taskB再运行。有什么区别吗?有时它们有相同的效果。例如,如果taskC依赖于taskA和taskB,则taskB依赖于taskA还是必须在其之后运行并不重要-当您运行taskC时,顺序将为taskA、taskB、taskC 但如果taskC仅依赖于taskB,则存在差异。如果taskB依赖于taskA,那么它与上面的taskA、taskB、taskC相同。如果taskB仅在taskA之后运行,则ta
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
mustRunAfter
mustRunAfter
控制在命令行上显式指定的任务的执行顺序,但不创建对其他任务的隐式依赖关系。给定taskA
和taskB
:
build.gradle.kts
val taskA by tasks.registing{
多拉斯特{
println(“taskA”)
}
}
val taskB by tasks.registing{
多拉斯特{
println(“taskB”)
}
}
任务B{
mustRunAfter(taskA)
}
然后
执行gradle taskB taskA
,然后执行taskA
李>taskB
仅执行gradle taskA
李>taskA
仅执行gradle taskB
taskB
dependsOn
dependsOn
创建对其他任务的隐式依赖。考虑到同样的两个任务:
taskB{
德彭森(任务A)
}
然后
执行gradle taskB
,然后执行taskA
李>taskB
执行gradle taskB taskA
,然后执行taskA
李>taskB
仅执行gradle taskA
taskA
mustRunAfter
和dependsOn
接受请求。鉴于:
val taskC by tasks.registing{
多拉斯特{
println(“taskC”)
}
}
任务C{
dependsOn(任务A、任务B)
}
然后,gradle taskC
以无保证的顺序执行taskA
和taskB
,然后执行taskC
(假设没有其他dependsOn
或必须在声明之后运行)
mustRunAfter
还控制相互依赖的任务之间的执行顺序,否则这些任务将无法保证顺序。鉴于:
taskB{
mustRunAfter(taskA)
}
然后gradle taskC
执行taskA
,然后执行taskB
,然后执行taskC
,但是gradle taskB
只运行taskA
,因为taskB不依赖于(taskA)
其他类型的任务依赖关系
taskA{finalizedBy(taskB)}
确保gradle taskA
执行taskA
,然后执行taskB
李>
shouldlrunafter
提供的订购保证比mustRunAfter
弱
进一步阅读
有关以下方面的更多信息,请参阅Gradle文档:
这是否意味着b.dependsOn(a)
不会将a
的输出添加到b
的输入中?因此a
可以在不运行b
的情况下运行吗?@AnthonyD973否,本例中的输入不是隐式传递的。不过,Gradle确实支持基于其他领域的输入/输出的依赖性推理。
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)
}