maven - 使用docker构建maven项目时如何解决减少maven下载依赖时间的问题?
问题描述
我已经构建了常见的 mavne 依赖项作为基础 docker 映像,但是当我构建项目 Dockerfile 时,它仍然会下载依赖项,这需要很长时间才能构建。
解决方案
结合go-offline目标maven-dependency-plugin
,maven 的离线模式与docker 多阶段构建。
参考Dockerfile
可以是:
# Step : Test and package
FROM maven:3.5.3-jdk-8-alpine as builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src/ /build/src/
# -o flag will instruct maven to build on offline mode
RUN mvn -o package
# Step : Package image
FROM openjdk:8-jre-alpine
EXPOSE 4567
CMD exec java $JAVA_OPTS -jar /app/my-app.jar
COPY --from=builder /build/target/*jar-with-dependencies.jar /app/my-app.jar
调用dependency:go-offline
将在容器的本地存储库中获取所需的工件。由于 docker 层缓存,这一步将被缓存,因此在新的构建尝试中将被跳过。
一个重要的注意事项是,复制pom.xml
应该先于源代码复制,因为更改pom.xml
必须触发新的 Maven 工件,因为项目的依赖关系可能已经改变。
编辑:请注意,根据您的pom.xml
情况,您可能会面临一个开放的 Maven 依赖插件问题,在该问题上,某些依赖项未按应有go-offline
的目标从目标中获取,从而导致构建失败。作为一种解决方法,您可以尝试Romain's answer。
推荐阅读
- html - 当所有其他容器都尽可能小时,如何让容器缩小?
- c++ - 如何在运行时从 flatbuffer 中获取数据值和数据类型
- ios - 如何使用新的pencilkit api注释pdf?
- jenkins - 如果 jenkinsfile 不存在,Bitbucket 分支源插件无法扫描
- firebase - Cloud Functions - 用户自定义声明返回未定义
- node.js - 如何在 Sequelize 中使用案例条件?
- reactjs - reactjs中有哪些节点?
- java - 分解 SVD 时 OjAlgo 和 Commons-math 之间奇异值的差异
- c# - 从调制解调器读取长短信
- spring - 部分重构为 Spring