Вызов другой задачи из задачи в 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'
}