Изменение задачи Gradle в подпроекте

Итак, допустим, у меня такая структура проекта:

Root
    projA
        projA1-api
        projA2-core
        projA3-main
    projB
        projB1-api
        projB2-core
        projB3-main
    projC
        projC1-api
        projC2-core
        projC3-main
    and so on...

К некоторым подпроектам (которые заканчиваются на «-основной») применяются плагины war и spring boot, а к корневому файлу build.gradle - нет. Это означает, что в проектах projA3-main, projB3-main и projC3-main есть задача bootWar, которая отключает задачу war.

Теперь проблема заключается в том, что наш конвейер jenkins создает войны, выполняя команду gradle war, которая отстойна и не может быть изменена.

Итак, что я хочу сделать, так это изменить военную задачу в каждом из подпроектов, содержащих военный плагин, установив ее зависимость от задачи bootWar. Я могу сделать это, добавив war.dependsOn bootWar в файлы build.gradle подпроектов, и это работает, но я хочу извлечь этот код в корневой build.gradle.

Кроме того, я хочу, чтобы задача war также выполняла другую задачу (назовем ее customPrintTask), определенную в корне build.gradle, которая просто печатает материал в некоторый файл.

Обобщить:

Root build.gradle doesn't have, war, bootWar or Spring Boot plugins, but has the customPrintTask task

"-main" subprojects have bootWar and spring boot plugins, and they also have the war plugin, but because I am using Spring Boot 2+ gradle plugin, the war task does not generate the war.

В принципе, я хочу что-то вроде этого:

allprojects {
    if (project.plugins.hasPlugin("war")) {
        war.dependsOn bootWar
        war.finalizedBy customPrintTask
    }
}

Я надеюсь, что в этом есть смысл.

Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
0
1 068
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Йо, разобрался.

allprojects {
    tasks.withType(War) {
        if (it.name != "bootWar") {
            dependsOn(customPrintTask)
            dependsOn(":" + it.project.name.replace("-main", "") + ":" + it.project.name + ":bootWar")
        }
    } 
}

Я знаю, что никого это не волнует, но таким образом я повторял каждую задачу с типом War, и если имя задачи не bootWar (из-за круговой зависимости), тогда зависит от моей настраиваемой задачи печати, а также зависит от задачи bootWar, которая находится в подпроект, который я сейчас повторяю, поэтому он выглядит глупым.

Это довольно просто, не знаю, как я это пропустил ... выглядит ужасно некрасиво, но работает!

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