Вызов другой задачи из задачи в gradle
Я использую Gradle. У меня две задачи: "а" и "Б". Я хочу, чтобы задача " a "называлась задачей"b". Как я могу это сделать?
task b(type: Exec) {
description "Task B"
commandLine 'echo', 'task-b'
}
task a(type: Exec) {
description "Task A"
commandLine 'echo', 'task-a'
// TODO: run task b
}
в Ant это кусок пирога:
<target name="a">
<echo message="task-a"/>
<antcall target="b"/>
</target>
<target name="b">
<echo message="task-b"/>
</target>
первый метод, который я попробовал, использует функцию "dependsOn". Однако это не идеально, так как нам нужно было бы подумать обо всех задачах в обратном порядке, а также имеет несколько других проблем (например, выполнение задачи при выполнении условия).
другой метод, который я пробовал есть:
b.mustRunAfter(a)
однако это работает только в том случае, если я запускаю задачи gradle следующим образом:
gradle -q a b
что тоже не идеал.
есть ли в любом случае просто просто вызвать другую задачу из существующей задачи?
3 ответов
как было предложено, одним из методов было бы добавить финализатор для задачи
task beta << {
println 'Hello from beta'
}
task alpha << {
println "Hello from alpha"
}
// some condition
if (project.hasProperty("doBeta")) {
alpha.finalizedBy beta
}
тогда мы можем выполнить другую задачу, если это необходимо. Что касается выполнения задач из других задач, вы не можете этого сделать. Объявление задачи является декларативным, а не императивным. Поэтому задача может зависеть от другой задачи, но не могут выполнить другую задачу.
$ gradle -q alpha
Hello from alpha
$ gradle -q alpha -PdoBeta
Hello from alpha
Hello from beta
можно использовать
a.dependsOn 'b'
или
a.dependsOn b
или
task a(type: Exec, dependsOn: 'b') { ... }
etc
посмотреть добавление зависимостей для задачи
суммировать и объединить ответы от @JBirdVegas и @Lance-java, используя non-deprecated doLast
вместо leftShift (<<
):
task beta {
doLast {
println 'Hello from beta'
}
}
task alpha {
doLast {
println 'Hello from alpha'
}
}
// some condition
if (project.hasProperty('doBeta')) {
alpha.finalizedBy beta // run 'beta' after 'alpha'
// or
// alpha.dependsOn beta // run 'beta' before 'alpha'
}