Gradle - добавить дополнительную задачу к существующей задаче

Я работаю над проектом, который использует EJB2s. Созданные EJB Jar требуют дополнительной обработки сервером приложений, прежде чем они будут объединены в war/ear и развернуты.

Я создал пользовательскую задачу, которая работает для дополнительной обработки, если я вызываю ее явно (gradle ejbDeploy), но у меня возникают проблемы при ее установке в многопроектный жизненный цикл gradle. Мне нужно как-то добавить его в график сборки для автоматического выполнения после задачи jar.

Моей первой попыткой было добавить его в банку с

jar.doLast{
    ejbDeploy.execute()
} 

который, кажется, работает для произвольных блоков кода, но не для задач

Какое рекомендуемое решение для этого? Я вижу три подхода:

  1. Подключитесь к графу сборки и добавьте его явно после задачи jar.
  2. Настройте это как-нибудь в jar.doLast{}
  3. Установите его как предварительное условие для выполнения задачи WAR

Есть ли рекомендуемый подход?

Спасибо!

3 ответа

Решение

Я новичок в Gradle, но я бы сказал, что ответ на самом деле зависит от того, что вы пытаетесь достичь.

Если вы хотите выполнить задачу, когда кто-то запускает команду gradle jarтогда подхода № 3 будет недостаточно.

Вот что я сделал для чего-то похожего

classes {
    doLast {
        buildValdrConstraints.execute()
    }
}

task buildValdrConstraints(type: JavaExec) {
    main = 'com.github.valdr.cli.ValdrBeanValidation'
    classpath = sourceSets.main.runtimeClasspath
    args '-cf',valdrResourcePath + '/valdr-bean-validation.json'
}

Я бы пошел на подход № 3 и установить его как зависимость от задачи войны, например:

war {
    it.dependsOn ejbDeploy
    ...
}

Добавьте следующее, а затем ejbDeploy будет выполнен сразу после jar, но прежде war

jar.finalizedBy ejbDeploy

Смотрите Gradle Docs. 18,11. Финализатор задач

Другие вопросы по тегам