Gradle 修改子项目中的渐变任务
假设我有这样的项目结构:Gradle 修改子项目中的渐变任务,gradle,build.gradle,war,subproject,spring-boot-gradle-plugin,Gradle,Build.gradle,War,Subproject,Spring Boot Gradle Plugin,假设我有这样的项目结构: 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... 一些子项目(以
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
插件,但根build.gradle文件没有。
这意味着项目projA3 main、projB3 main和projC3 main具有bootWar
任务,该任务禁用war
任务
现在,问题在于我们的jenkins管道通过执行gradle war
命令来构建战争,这很糟糕,无法更改
因此,我想做的是修改包含war插件的每个子项目中的war任务,方法是将其设置为依赖于bootWar
任务。我可以通过将war.dependsOn bootWar
添加到子项目的build.gradle
文件中来实现这一点,这是可行的,但我想将该代码提取到根build.gradle
中
另外,我希望war
任务也执行另一个在rootbuild.gradle
中定义的任务(我们称之为customPrintTask
),它只是将内容打印到某个文件中
总结如下:
Root build.gradle没有、war、bootWar或Spring引导插件,但有customPrintTask任务
“-main”子项目有bootWar和springboot插件,它们也有war插件,但是因为我使用的是springboot2+gradle插件,war任务不会生成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
任务,这就是它看起来愚蠢的原因
这很简单,不知道我怎么会错过这一个…看起来非常难看,但它的工作