我有一个gradle项目,我想使用jib
进行构建。该项目包含子项目,其排列方式如下:
root
|
|build.gradle.kts
|settings.gradle.kts
|web/
|build.gradle.kts
|src/
|main/
|java....(etc)
|resources/
|config.yaml
请注意,:web子项目的资源中包含config.yaml
。
我让副臂在root build.gradle中使用适当的入口点构建了一个docker映像,但是我不确定如何获取映像中包含的:web
子项目的资源。
我在根jib
中的build.gradle
任务如下:
tasks {
jib {
configurations {
container {
mainClass = applicationMainClassName
args = listOf("server", "$appRoot/resources/config.yaml")
ports = listOf("8080")
jvmFlags = listOf("-server", "-Djava.awt.headless=true", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication")
}
}
}
}
我尝试在容器中的args中同时使用$appRoot/config.yaml
和$appRoot/resources/config.yaml
,但是没有运气。
构建映像并尝试运行它后的错误如下:
> docker run my_app
java.io.FileNotFoundException: File /resources/config.yaml not found
at io.dropwizard.configuration.FileConfigurationSourceProvider.open(FileConfigurationSourceProvider.java:18)
at io.dropwizard.configuration.SubstitutingSourceProvider.open(SubstitutingSourceProvider.java:37)
at io.dropwizard.configuration.BaseConfigurationFactory.build(BaseConfigurationFactory.java:80)
at io.dropwizard.cli.ConfiguredCommand.parseConfiguration(ConfiguredCommand.java:126)
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:74)
at io.dropwizard.cli.Cli.run(Cli.java:78)
at io.dropwizard.Application.run(Application.java:93)
at my.web.HelloWorldApplication.main(HelloWorldApplication.java:17)
答案 0 :(得分:0)
因此,在进一步阅读臂文档之后,所有资源都被装入/app/resources
中。为了提取所有子项目资源,我在根项目build.gradle.kts
中进行了以下操作:
// collect all subproject resources
tasks.processResources {
from(subprojects.flatMap {
it.sourceSets.main.get().resources.srcDirs
})
}
这里的一件事是,在不同的子项目中不能有相同名称的文件。