gpt4 book ai didi

gradle - 在子项目中修改Gradle任务

转载 作者:行者123 更新时间:2023-12-03 03:58:31 27 4
gpt4 key购买 nike

因此,假设我有这种项目结构:

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插件,而root build.gradle文件则没有。
这意味着项目projA3-main,projB3-main和projC3-main具有 bootWar任务,该任务禁用了 war任务。
现在,问题出在我们的 Jenkins 管道通过执行 gradle war命令来建立 war 的事实,该命令很烂而且无法更改。
因此,我想做的是通过将其设置为依赖 bootWar任务来修改每个包含war插件的子项目中的war任务。我可以通过将 war.dependsOn bootWar添加到子项目的 build.gradle文件中来完成此操作,但是我想将该代码提取到根 build.gradle中。
另外,我希望 war任务还执行在根 customPrintTask中定义的另一个任务(我们将其称为 build.gradle),该任务只是将内容打印到某个文件中。
总结一下:

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任务我当前正在迭代的子项目,这就是它看起来很笨的原因。

这很简单,不确定我是如何错过这个的……看起来非常丑陋,但是有效!

关于gradle - 在子项目中修改Gradle任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51653073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com