在使用Docker构建Maven项目时,如何解决减少Maven下载依赖时间的问题?

时间:2019-09-04 09:30:04

标签: maven docker

我已经将常见的mavne依赖项构建为基本的docker映像,但是当我构建项目Dockerfile时,它仍然会下载依赖项,这需要很长时间才能构建。

2 个答案:

答案 0 :(得分:1)

maven-dependency-plugingo-offlinemaven's offline modedocker multistage builds目标合并。

引用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工件,因为项目的依赖关系可能已更改。

Reference

编辑:请注意,根据您的pom.xml,您可能会遇到一个open Maven Dependency plugin issue,在该Romain's answer上,某些依赖项可能无法从go-offline目标中获取他们应该,从而导致构建失败。解决方法是,您可以尝试{{3}}。

答案 1 :(得分:0)

例如,使用docker experimental featuresbuildit可以在构建期间挂载(共享的)缓存卷:

# syntax = docker/dockerfile:experimental
FROM fabric8/maven-builder
...
RUN --mount=type=cache,target=/root/.m2 mvn versions:set -DnewVersion=1.1.43 && \
    mvn clean install ...