gpt4 book ai didi

java - 在 mvn 包阶段将本地 Maven m2 存储库包含在 Dockerfile 中?

转载 作者:行者123 更新时间:2023-12-01 22:10:19 25 4
gpt4 key购买 nike

如何将本地计算机 ~/.m2/repository 包含在 docker buildmvn dependency:resolve 阶段? docker build 没有 -v 选项。仅使用 docker build 就可以与我们现有的构建管道兼容(只允许使用单独的 Dockerfile)吗?这个answer没有帮助。

当前 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 存储库的文件夹,并将整个文件夹复制到 Docker 镜像中。但是,现在我无法让 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.

最佳答案

您可以做的一个想法是在 docker 中缓存 Maven 依赖项。您可以使用 mvn dependency-offline ( https://maven.apache.org/plugins/maven-dependency-plugin/ ),执行 dependency-offline maven 解析准备离线所需的依赖项并重用它们,只要 pom.xml 仍然是相同

关于java - 在 mvn 包阶段将本地 Maven m2 存储库包含在 Dockerfile 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58664304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com