Gradle插件:如果任务A或任务B:
我正在创建自定义插件任务,遇到了需要帮助的情况。 我创建了3个任务。gradle中的任务A、B、C。 只有当A或B获得成功时,任务C才能执行。 请注意,A和B是两个独立的任务,不相关Gradle插件:如果任务A或任务B:,gradle,build.gradle,gradle-plugin,Gradle,Build.gradle,Gradle Plugin,我正在创建自定义插件任务,遇到了需要帮助的情况。 我创建了3个任务。gradle中的任务A、B、C。 只有当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)。有
class A extends DefaultTask { }
class B extends DefaultTask { }
class C extends DefaultTask { }
如果我尝试
C.dependsOn(A);C.dependsOn(B)代码>,那么我认为C同时依赖于A和B(而不是A或B)。有没有办法在这里指定一个或B条件。您可以添加多个依赖项
task B << {
println 'Hello from B'
}
task C << {
println 'Hello from C'
}
task D(dependsOn: ['B', 'C'] << {
println 'Hello from D'
}
Gradle为任务依赖关系和排序提供了四种方法(和相关容器):
样式:t1.(t2)
dependsOn
-确保在执行t1
之前执行t2
finalizedBy
-确保在执行t2
后执行t2
mustRunAfter
-确保如果执行了t2
和t1
(由其他触发器引起),则t1
在之后执行
应在
之后运行-基本上与必须在
之后运行相同,但在特殊情况下可以忽略(选中)
您的需求是特殊的,无法通过上述简单方法解决。如果我没有弄错您的问题,您希望确保任务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 }
}
嗨,加布里埃尔,谢谢你的回复。我只是想确保任务B或C(在你的例子中)在执行D之前已经完成。我不想让D执行B或C。有什么建议吗?@SIVA_J请仔细阅读你的问题。我不知道如何认识到这种情况。可能您可以尝试finalizedBy方法,但仅具有或条件是不够的。据我所知,b.finalizedBy(d)或c.finalizedBy(d)将在b、c任务执行后触发任务d。但是我不想自动触发。我只想确保在执行D之前是否完成了B或C(任何一个)。我仍在探索动态任务
task A { }
task B { }
task C {
mustRunAfter A, B
onlyIf { A.state.executed || B.state.executed }
}