我知道目前调用一个任务的支持方法是使用dependsOn
或finalizedBy
,但我遇到了一个问题。
我有一个任务taskA
,它可以独立使用。我还有另一个任务taskB
,当被调用时,将依赖于taskA
。问题在于taskB
有额外的条件,如果这些条件失败,则需要跳过该任务。这是我想要实现的工作流程:
$ gradle taskA
:taskA
BUILD SUCCESSFUL
$ gradle taskB
checking condition 1... PASS
checking condition 2... PASS
:taskA
:taskB
BUILD SUCCESSFUL
$ gradle taskB
checking condition 1... PASS
checking condition 2... FAIL
:taskA SKIPPED
:taskB SKIPPED
BUILD SUCCESSFUL
如果直接调用或从不同任务的
doFirst
或dependsOn
中调用,taskA
应该无论如何都会执行。但是如果调用了taskB
,则必须满足条件才能执行taskA
。这是我尝试过的方法:project.tasks.create(name: "taskB", type: MyTask, dependsOn: "taskA")
project.taskB{
onlyIf {
if (!conditionA()){
return false
}
if (!conditionB()){
return false
}
return true
}
}
这里的问题在于
taskA
会在检查 taskB
的 onlyIf
条件之前执行,因此即使条件失败,taskA
也会执行。我该如何解决这个问题?
apply plugin
,它会在插件上执行apply()
方法。该方法调用new PluginConfigurator().configure(project)
。PluginConfigurator.configure()
方法是进行配置的地方。它需要一个类型为org.gradle.api.Project
的参数。当我尝试将您建议的代码添加到该方法中时,我会得到No such property: gradle for class: plugin.PluginConfigurator
的错误提示。 - ewok