Итак, допустим, у меня такая структура проекта:
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
}
}
Я надеюсь, что в этом есть смысл.


Йо, разобрался.
allprojects {
tasks.withType(War) {
if (it.name != "bootWar") {
dependsOn(customPrintTask)
dependsOn(":" + it.project.name.replace("-main", "") + ":" + it.project.name + ":bootWar")
}
}
}
Я знаю, что никого это не волнует, но таким образом я повторял каждую задачу с типом War, и если имя задачи не bootWar (из-за круговой зависимости), тогда зависит от моей настраиваемой задачи печати, а также зависит от задачи bootWar, которая находится в подпроект, который я сейчас повторяю, поэтому он выглядит глупым.
Это довольно просто, не знаю, как я это пропустил ... выглядит ужасно некрасиво, но работает!