Использование jib-gradle-plugin для создания мультипроектного приложения Dropwizard - PullRequest
0 голосов
/ 07 июня 2019

У меня есть проект gradle, который я хотел бы построить, используя jib. Проект содержит подпроекты, расположенные так:

root
|
|build.gradle.kts
|settings.gradle.kts
|web/
    |build.gradle.kts
    |src/
        |main/
             |java....(etc)
             |resources/
                       |config.yaml

Обратите внимание, что подпроект: web содержит 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 в аргументах для контейнера, но безуспешно.

Ошибка после построения образа и попытки его запуска выглядит следующим образом:

> 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 Ответ

0 голосов
/ 09 июня 2019

Таким образом, при дальнейшем чтении документации Jib все ресурсы монтируются в /app/resources.Чтобы задействовать все ресурсы моего подпроекта, я сделал следующее в своем корневом проекте build.gradle.kts:

// collect all subproject resources
tasks.processResources {
    from(subprojects.flatMap {
        it.sourceSets.main.get().resources.srcDirs
    })
}

Единственное, что вы не можете иметь файлы с одинаковыми именами в разных подпроектах.

...