Использование jib-gradle-plugin для создания мультипроектного приложения Dropwizard
У меня есть проект gradle, который я хотел бы построить, используя jib
, Проект содержит подпроекты, расположенные так:
root
|
|build.gradle.kts
|settings.gradle.kts
|web/
|build.gradle.kts
|src/
|main/
|java....(etc)
|resources/
|config.yaml
Обратите внимание, что: веб-подпроект содержит config.yaml
в его ресурсах.
У меня есть jib, создающий образ докера в корневом build.gradle с соответствующей точкой входа, но я не уверен, как получить :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")
}
}
}
}
Я пытался использовать оба $appRoot/config.yaml
также как и $appRoot/resources/config.yaml
в args для контейнера без удачи.
Ошибка после построения образа и попытки его запуска выглядит следующим образом:
> 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)
1 ответ
Таким образом, при дальнейшем чтении документации Jib все ресурсы монтируются в /app/resources
, Чтобы извлечь все ресурсы моего подпроекта, я сделал следующее в своем корневом проекте build.gradle.kts
:
// collect all subproject resources
tasks.processResources {
from(subprojects.flatMap {
it.sourceSets.main.get().resources.srcDirs
})
}
Одна вещь здесь - то, что вы не можете иметь файлы с одинаковыми именами в разных подпроектах.