Создайте модули multi maven, затем скопируйте JAR-файлы в образ докера - PullRequest
0 голосов
/ 28 августа 2018

У меня есть многомодульный проект, настроенный с помощью maven.

/myProject
  /module1
    /target
    pom.xml
  /module2
    /target
    pom.xml
  pom.xml

Родитель pom создает подмодули.

Использование com.spotify.dockerfile-maven-plugin Я хочу собрать все модули, создать образ докера и скопировать все JAR-файлы внутри этого образа.

Родитель пом

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>myTest</artifactId>
    <name>test</name>
    <version>0.0.1</version>
    <packaging>pom</packaging>

    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>

</project>

Если я помещаю Dockerfile в корень / myProject, плагин жалуется, что Dockerfile для module1

нет
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} /home/xyz/jars

Плагин Maven:

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <configuration>
            <repository>mytest</repository>
            <buildArgs>
                <JAR_FILE>target/${project.artifactId}-${project.version}.jar</JAR_FILE>
            </buildArgs>
        </configuration>
    </plugin>

Это нормально работает с одним модулем, если я помещаю Dockerfile внутри этого модуля, но как это сделать с несколькими модулями и только с 1 Dockerfile?

Могу ли я собрать подмодули, а затем образ докера с одним mvn clean install на родительском помпе?

Может быть, путем создания подмодуля только с pom и Dockerfile?

1 Ответ

0 голосов
/ 28 августа 2018

Если файлы jar являются зависимостями для одного исполняемого файла, тогда да, вы можете просто создать этот исполняемый файл с его зависимостями, объявленными в его файле pom.xml. Maven должен выяснить, в каком порядке строить подмодули в , если вы не создаете цикл. Как вы предлагаете, вы хотите сделать его подмодулем, а не корневым pom, поскольку корневой pom является родительской конфигурацией, которая наследуется другими модулями. Просто поместите плагин в этот один подмодуль (в его pom.xml) и дайте ему только Dockerfile.

(Если вы думаете, что это проблема наличия одного исполняемого файла в зависимости от библиотек в одном и том же проекте maven, то это на самом деле не связано с докером. Вы могли бы задать тот же вопрос о приложении весенней загрузки, используя библиотеки в тот же многомодульный проект . В некотором смысле это просто проблема, поскольку jar будет собран вместе со своими зависимостями и скопирован в образ докера.)

Или если вы имеете в виду, что каждый jar для каждого подмодуля сам по себе является исполняемым файлом (и я не думаю, что вы это делаете), то вы можете создать несколько образов Docker, каждое из своего Dockerfile, а затем вы можете связать и запустить их. вместе, если вы хотите, с файлом docker-compose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...