阅读 83

7.9 Maven Docker缓存依赖项| Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:Maven Docker缓存依赖项

我正在尝试使用docker自动执行Maven构建。我要构建的项目花费了将近20分钟的时间来下载所有依赖项,因此我尝试构建一个可以缓存这些依赖项的docker映像,但似乎并没有保存它。我的Dockerfile是

FROM maven:alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ADD pom.xml /usr/src/app
RUN mvn dependency:go-offline
复制代码

映像已构建,并且确实下载了所有内容。 但是,生成的映像像与基本的maven:alpine映像大小相同,因此似乎没有在映像中缓存依赖项。 当我尝试使用映像进行mvn编译时,将经历20分钟的重新下载所有内容。

是否可以构建一个缓存我的依赖项的Maven映像,这样我每次使用映像执行构建时都不必下载它们?

我正在运行以下命令:

docker build -t my-maven .

docker run -it --rm --name my-maven-project -v "$PWD":/usr/src/mymaven -w /usr/src/mymaven my-maven mvn compile
复制代码

我的理解是,在docker构建过程中RUN所做的任何事情都会成为结果映像的一部分。

回答1:

通常,pom.xml当您尝试启动Docker映像构建时,文件没有任何变化,只有其他一些源代码发生了变化。在这种情况下,您可以执行以下操作:

FROM maven:3-jdk-8

ENV HOME=/home/usr/app

RUN mkdir -p $HOME

WORKDIR $HOME

# 1. add pom.xml only here

ADD pom.xml $HOME

# 2. start downloading dependencies

RUN ["/usr/local/bin/mvn-entrypoint.sh", "mvn", "verify", "clean", "--fail-never"]

# 3. add all source code and start compiling

ADD . $HOME

RUN ["mvn", "package"]

EXPOSE 8005

CMD ["java", "-jar", "./target/dist.jar"]
复制代码

所以关键是:

1, 添加pom.xml文件。

2, 然后mvn verify --fail-never,它将下载Maven依赖项。

3, 然后添加所有源文件,然后开始编译(mvn package)。

当pom.xml文件中有更改或您第一次运行此脚本时,docker将执行1-> 2->3。当pom.xml文件中没有任何更改时,docker将跳过步骤1、2并直接执行3。

文章分类
后端
文章标签