gpt4 book ai didi

java - 如何对依赖于 Maven 本地存储库的 Java 应用程序进行 Docker 化?

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

我有一个 Java Spring Boot Web 应用程序,我想使用 Docker 对其进行容器化。我无法获取 mvn install命令在 Docker 构建过程中工作,因为我的项目依赖于我编写的一些其他 Maven 项目,这些项目安装在我的本地 /.m2文件夹,但在 Maven 中央存储库中不可用。我想避免将这些本地项目添加到公共(public) Maven 中央存储库,因为它们专门用于支持 这个 Spring Boot 应用程序,我想将它们保密。

如果我没有使用 Docker,我可以通过构建 JAR with dependencies 来解决这个问题。然后部署 .jar文件。我有什么办法可以在我的 Docker 构建过程中包含这些本地依赖项?

这是我尝试运行的简单 Dockerfile:

# Step 1: Build with Maven
FROM maven:3.5-jdk-8-alpine

COPY . /usr/src/myapp
WORKDIR /usr/src/myapp

RUN mvn clean install


# Step 2: Run jar file with Java
FROM openjdk:8-alpine

WORKDIR /usr/src/myapp

COPY --from=0 /usr/src/myapp/target/myapp-1.0-SNAPSHOT.jar ./myapp.jar

ENTRYPOINT ["java", "-jar", "myapp.jar"]

我运行这个构建命令:
docker build -t myspringapp .

它会出现以下消息错误:
[ERROR] Failed to execute goal on project server: Could not resolve dependencies for project 
com.website:myapp:jar:1.0-SNAPSHOT: The following artifacts could not be resolved:
com.website:dependency1:jar:0.1.0, com.website:dependency2:jar:0.1.0,
com.website:dependency3:jar:0.1.0:
Could not find artifact com.website:dependency1:jar:0.1.0 in central
(https://repo.maven.apache.org/maven2) -> [Help 1]

作为一个替代问题,我可以运行 mvn clean install吗?我的开发机器上的命令生成 jar 文件然后跳过 Docker 镜像的整个 Maven 构建部分?我的容器是否仍然能够在自动缩放场景中自我复制? 通过将项目与其 Docker 镜像/容器分开构建,我会失去任何东西吗?

最佳答案

最简单的事情就是把你的 .m2 Docker 构建上下文中的目录,并确保 Dockerfile 的构建阶段执行 COPY.m2到基础 Maven 图像所期望的任何位置。这样,构建阶段就不需要下载您的私有(private) JAR 文件。

要回答您的替代问题,是的。这不是非常多的 12 因素,但绝对可以在 Docker 生态系统之外进行 JAR 构建,然后只需 COPY将预构建的 JAR 文件放入镜像中。

关于java - 如何对依赖于 Maven 本地存储库的 Java 应用程序进行 Docker 化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60783902/

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