修改子项目中的 gradle 任务
Modifying gradle task in a subproject
所以,假设我有这样的项目结构:
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 具有禁用 war
的 bootWar
任务]任务。
现在,问题在于我们的 jenkins 管道通过执行 gradle war
命令构建 wars,这很糟糕并且无法更改。
所以,我想做的是修改每个包含 war 插件的子项目中的 war 任务,将其设置为依赖于 bootWar
任务。我可以通过将 war.dependsOn bootWar
添加到子项目的 build.gradle
文件中来做到这一点,但我想将该代码提取到根 build.gradle
.
此外,我希望 war
任务也执行在根 build.gradle
中定义的另一个任务(我们称之为 customPrintTask
),它只是将内容打印到某个文件中。
总结一下:
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
任务,这就是它看起来很笨的原因。
非常简单,不知道我是怎么错过这个的...看起来非常丑陋,但它确实有效!
所以,假设我有这样的项目结构:
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 具有禁用 war
的 bootWar
任务]任务。
现在,问题在于我们的 jenkins 管道通过执行 gradle war
命令构建 wars,这很糟糕并且无法更改。
所以,我想做的是修改每个包含 war 插件的子项目中的 war 任务,将其设置为依赖于 bootWar
任务。我可以通过将 war.dependsOn bootWar
添加到子项目的 build.gradle
文件中来做到这一点,但我想将该代码提取到根 build.gradle
.
此外,我希望 war
任务也执行在根 build.gradle
中定义的另一个任务(我们称之为 customPrintTask
),它只是将内容打印到某个文件中。
总结一下:
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
任务,这就是它看起来很笨的原因。
非常简单,不知道我是怎么错过这个的...看起来非常丑陋,但它确实有效!