我正在创建自定义插件任务,并遇到需要帮助的情况。 我创建了3个任务。任务A,B,C在gradle中。 只有当A或B成功时,才能执行任务C. 请注意,A和B是两个独立的任务,不相关。
class A extends DefaultTask { }
class B extends DefaultTask { }
class C extends DefaultTask { }
如果我尝试C.dependsOn(A); C.dependsOn(B);
,那么我认为C依赖于A 和 B(不是A 或 B)。有没有办法在这里指定A 或 B条件。
答案 0 :(得分:2)
Gradle为任务依赖和排序提供了四种方法(和相关容器):
样式:t1.<method>(t2)
dependsOn
- 确保t2
执行如果,执行 t1
之前。
finalizedBy
- 确保t2
执行,如果,执行 t2
后执行。
mustRunAfter
- 确保如果 t2
和t1
都已执行(由其他触发器引起),t1
为在 t2
后执行。
shouldRunAfter
- 基本上与mustRunAfter
相同,但在特殊情况下可能会被忽略(请检查https://www.i18next.com/supported-frameworks.html)。
您的要求很特殊,并且无法通过上述简单方法解决。如果我理解你的问题,你需要确保任务C在任务A和B之后执行,但只有在任何时候执行它(而不是自动触发它)。您可以使用mustRunAfter
来满足要求的第一部分。但是,您还希望确保之前执行任务A 或任务B.我建议使用onlyIf
方法跳过任务C的任务执行,如果之前没有执行过A或B.例如:
task A { }
task B { }
task C {
mustRunAfter A, B
onlyIf { A.state.executed || B.state.executed }
}
答案 1 :(得分:0)
您可以添加多个依赖项。
if (playerIsFlagged == true && player.distance < 10){
doaction()
}
输出结果为:
task B << {
println 'Hello from B'
}
task C << {
println 'Hello from C'
}
task D(dependsOn: ['B', 'C'] << {
println 'Hello from D'
}