Включить локальное репозиторий Maven m2 в Dockerfile на этапе создания пакета mvn? - PullRequest
0 голосов
/ 01 ноября 2019

Как включить локальный компьютер ~/.m2/repository в mvn dependency:resolve этап docker build? Для docker build нет опции -v. Возможно ли с помощью docker build быть совместимым с существующим конвейером сборки (разрешен только отдельный Dockerfile)? Этот ответ не помог.

Текущий Dockerfile:

FROM maven:3.6.2-jdk-11 AS maven

WORKDIR /tmp/

# Set the local repository to /tmp/.m2/repository
RUN echo \
    "<settings xmlns='http://maven.apache.org/SETTINGS/1.0.0\' \
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
    xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd'> \
        <localRepository>/tmp/.m2/repository</localRepository> \
        <interactiveMode>true</interactiveMode> \
        <usePluginRegistry>false</usePluginRegistry> \
        <offline>false</offline> \
    </settings>" \
    > /usr/share/maven/conf/settings.xml;

# TODO: How to perform -v ~/.m2/:/tmp/.m2/ but only using `docker build`?

COPY pom.xml /tmp/
RUN mvn dependency:resolve
RUN mvn dependency:resolve-plugins

COPY src /tmp/src/
RUN mvn package

FROM openjdk:11-jre-slim
EXPOSE 8080

RUN apt update
RUN apt -y install curl

WORKDIR /usr/app

ENV TARGET="<target name>.jar"

COPY --from=maven "/tmp/target/$TARGET" .
CMD ["java", "-jar", "$TARGET"]

И, конечно, это не работает:

Failed copy

Обновление: я могу смонтировать папку, указывающую на локальный репозиторий .m2, и скопировать всю папку в образ докера. Однако теперь я не могу заставить mvn использовать это локальное репо.

able to copy local repo

Тогда

COPY pom.xml /tmp/
RUN mvn -o -s /usr/share/maven/conf/settings.xml dependency:resolve -X

приведет к ошибке:

Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact com.myapp:somename:pom:1.0.4 has not been downloaded from it before.

1 Ответ

0 голосов
/ 01 ноября 2019

Идея, которую вы можете сделать, - это кэширование зависимостей maven в докере. Вы можете использовать mvn dependency-offline (https://maven.apache.org/plugins/maven-dependency-plugin/),, когда зависимый-автономный maven разрешает зависимости, необходимые для подготовки к отключению, и повторно использует их, пока файл pom.xml все еще будетже

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