【问题标题】:Moving Jib configuration of one module into a new module, to refactor multi-module gradle project将一个模块的jib配置移到新模块中,重构多模块gradle项目
【发布时间】:2021-11-18 01:55:34
【问题描述】:
我有一个多模块 gradle 项目,其中一个模块是 webapp。我在 webapp build.gradle 文件中添加了 Jib 配置以生成容器图像。
同样,我有一些用于命令行应用程序的模块,并且我使用 Jib jar config 来创建容器映像。
我想在新模块中移动 Jib 特定配置以整理 webapp/app build.gradle 文件,并希望通过创建新模块(比如 ':container:tomcat'、':container:app1')和设置来实现这一点为 webapp/app 项目设置任务(或其他东西)在此处设置 Jib 配置。我不确定我需要调用什么 gradle api 才能达到同样的效果?
我知道我可以从新模块 build.gradle 文件中访问 webapp/app 模块,但不确定如何在那里设置 Jib 配置。
有人可以建议如何实现这一目标吗?
【问题讨论】:
标签:
java
gradle
multi-module
jib
【解决方案1】:
在 Gradle 上,有很多方法可以实现您想要的任何目标。我的一个想法是为以下build.gradle 创建一个新模块(比如jibconf)。
['jib', 'jibDockerBuild', 'jibBuildTar'].each { jibTaskName ->
task "${jibTaskName}Webapp" {
doFirst {
project(':webapp').jib {
to.image = 'jib-webapp'
// and more ....
}
}
finalizedBy ":webapp:$jibTaskName"
}
task "${jibTaskName}App" {
doFirst {
project(':app').jib {
to.image = 'jib-app'
// and more ...
}
}
finalizedBy ":app:$jibTaskName"
}
}
然后在根目录下运行./gradelw jibW 或./gradle jibDBW 会构建一个webapp 镜像,而./gradlew jibA 或./gradlew jibDBA 会构建一个app 镜像。
请注意,建议注册一个任务而不是直接创建它,所以我实际上会这样做:
tasks.register("${jibTaskName}Webapp") { ...