Докеризация многомодульного приложения Maven?

У меня есть приложение Maven Java, которое я пытаюсь докеризовать. Пока у меня есть следующий файл докеров, который я скопировал из этого ответа.

#
# Build stage
#
FROM maven:3.6.0-jdk-11-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean install

EXPOSE 8080 9990

COPY --from=build /usr/src/app/target/helloworld-1.0.0-SNAPSHOT.jar /opt/jboss/jboss-eap-6.2/standalone/deployments/

Это было бы хорошо, если бы мое приложение было проектом с одним модулем, однако, поскольку оно многомодульное, я предполагаю, что не могу просто использовать COPY src /home/app/src.

Как я могу изменить свой файл докеров для учета моего многомодульного проекта?

Я пробовал следующее:

#
# Build stage
#
FROM maven:3.6.0-jdk-11-slim AS build
COPY module1 /home/app
COPY module2 /home/app
COPY module3  /home/app
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean install

EXPOSE 8080 9990
    
COPY --from=build /usr/src/app/target/helloworld-1.0.0-SNAPSHOT.jar /opt/jboss/jboss-eap-6.2/standalone/deployments/

Однако это дает ошибку на этапе mvn clean install:

[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for myapp:21.01-SNAPSHOT: Could not find artifact jee6:pom:1.0.1-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 8, column 10

Обратите внимание, что jee6:pom:1.0.1-SNAPSHOTиз моей локальной папки m2.

Отвечает ли это на ваш вопрос? докер с maven jar

Joe 23.12.2020 13:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 244
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас может быть дополнительный модуль интеграции с зависимостью от других модулей, который отвечает за сбор компонентов в образ Docker. Также хорошее место для размещения интеграционных тестов.

Я попытался скопировать все модули и построить их. не могли бы вы проверить редактирование вопроса на предмет ошибки.

java12399900 23.12.2020 13:17

Не могли бы вы дать больше информации об этом? Спасибо

java12399900 24.12.2020 12:44

@Raedwald Я пытался сделать то, что вы посоветовали, поместить все модули в модуль интеграции, но я все еще не могу собрать его в докере. вот мой вопрос stackoverflow.com/questions/70273777/…

user9347049 08.12.2021 13:17
Ответ принят как подходящий

Я бы просто использовал плагин maven jib вместо того, чтобы вручную создавать файл Dockerfile. Гораздо проще, и я думаю, что он должен работать и с многомодульными проектами.

У вас есть пример использования?

java12399900 23.12.2020 14:21

Глядя на свои коды, вы пытаетесь развернуть его на сервере приложений JBoss, верно?

allkenang 23.12.2020 15:08

Это усложняет задачу, поскольку сам сервер приложений Jboss должен находиться в образе докера. Кроме того, вариант использования образов Docker в этом случае не столь убедителен, поскольку образы Docker должны быть максимально компактными. Ваш подход к образу докера, вероятно, будет иметь больше смысла, если вы используете что-то вроде Spring Boot, например, для запуска своего приложения.

allkenang 23.12.2020 15:38

Хорошо, в таком случае, что бы вы порекомендовали? Я хочу построить проект maven, а затем запустить его на eap

java12399900 24.12.2020 12:21

Затем просто используйте типичное развертывание EAR или WAR. Забудьте о докеризации. Если вы не используете EJB, то проект WAR работает лучше всего, потому что он намного проще. Вот ссылка, которую вы можете использовать: sgaemsolutions.com/2019/06/…

allkenang 25.12.2020 07:15

Другие вопросы по теме