1

所以,假设我有这种项目结构:

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 ”结尾的子项目)已经应用warspring boot插件,根 build.gradle 文件没有。这意味着项目projA3-main、projB3-mainprojC3-main具有bootWar禁用该任务的war任务。

现在,问题在于我们的詹金斯管道通过执行gradle war命令来构建战争,这很糟糕并且无法更改。

所以,我想做的是通过将它设置为依赖于任务来修改包含war插件的每个子项目中的warbootWar任务。我可以通过添加war.dependsOn bootWar到子项目的build.gradle文件中来做到这一点并且可以工作,但我想将该代码提取到 rootbuild.gradle中。

另外,我希望该任务还执行在根目录中定义war的另一个任务(我们称之为),它只是将内容打印到某个文件中。customPrintTaskbuild.gradle

总结一下:

根 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
    }
}

我希望这是有道理的。

4

1 回答 1

2

哟,想通了。

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

我知道没人关心,但是这样我用类型迭代每个任务,War如果任务名称不是bootWar(因为循环依赖)然后取决于我的自定义打印任务,也取决于bootWar位于子项目中的任务我目前正在迭代,这就是它看起来很愚蠢的原因。

这很简单,不知道我是怎么错过这个的……看起来非常难看,但它确实有效!

于 2018-08-02T12:54:44.433 回答