Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle 修改子项目中的渐变任务_Gradle_Build.gradle_War_Subproject_Spring Boot Gradle Plugin - Fatal编程技术网

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
任务也执行另一个在root
build.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
任务,这就是它看起来愚蠢的原因

这很简单,不知道我怎么会错过这一个…看起来非常难看,但它的工作