所以,假设我有这种项目结构:
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...
某些子项目(以“ -main ”结尾的子项目已应用war
和spring boot
插件,而root build.gradle文件则没有。
这意味着项目 projA3-main,projB3-main 和 projC3-main 具有bootWar
任务,该任务禁用了war
任务。
现在,问题出在我们的詹金斯管道通过执行gradle war
命令来制造战争,这一命令很糟糕,无法更改。
因此,我要做的是通过将战争插件设置为依赖于bootWar
任务来修改每个包含战争插件的子项目中的战争任务。我可以通过将war.dependsOn bootWar
添加到子项目的build.gradle
文件中来做到这一点,并且可以,但是我想将该代码提取到根build.gradle
中。
我还希望war
任务还执行在根customPrintTask
中定义的另一个任务(简称为build.gradle
),该任务只是将内容打印到某个文件中。
总结:
root build.gradle没有war,bootWar或Spring Boot插件,但是具有customPrintTask任务
“ -main ”子项目具有bootWar和spring boot插件,它们也具有war插件,但是因为我使用的是Spring Boot 2+ gradle插件,所以war任务不会产生war
基本上,我想要这样的东西:
allprojects {
if (project.plugins.hasPlugin("war")) {
war.dependsOn bootWar
war.finalizedBy customPrintTask
}
}
我希望这是有道理的。
答案 0 :(得分:0)
是的,知道了。
allprojects {
tasks.withType(War) {
if (it.name != "bootWar") {
dependsOn(customPrintTask)
dependsOn(":" + it.project.name.replace("-main", "") + ":" + it.project.name + ":bootWar")
}
}
}
我知道没人在乎,但是这样我就遍历了类型为War
的每个任务,并且如果任务名称不是bootWar
(由于循环依赖),则取决于我的自定义打印任务并且还取决于我目前正在迭代的子项目中的bootWar
任务,这就是它看起来很笨的原因。
这很简单,不确定我是如何错过这个的...看起来非常丑陋,但是有效!