• <tfoot id='82SJp'></tfoot>
      <bdo id='82SJp'></bdo><ul id='82SJp'></ul>

    <small id='82SJp'></small><noframes id='82SJp'>

    <i id='82SJp'><tr id='82SJp'><dt id='82SJp'><q id='82SJp'><span id='82SJp'><b id='82SJp'><form id='82SJp'><ins id='82SJp'></ins><ul id='82SJp'></ul><sub id='82SJp'></sub></form><legend id='82SJp'></legend><bdo id='82SJp'><pre id='82SJp'><center id='82SJp'></center></pre></bdo></b><th id='82SJp'></th></span></q></dt></tr></i><div id='82SJp'><tfoot id='82SJp'></tfoot><dl id='82SJp'><fieldset id='82SJp'></fieldset></dl></div>

      1. <legend id='82SJp'><style id='82SJp'><dir id='82SJp'><q id='82SJp'></q></dir></style></legend>

      2. Maven docker缓存依赖

        时间:2023-09-30

              <tbody id='WDWW4'></tbody>

            <small id='WDWW4'></small><noframes id='WDWW4'>

                <bdo id='WDWW4'></bdo><ul id='WDWW4'></ul>
              • <tfoot id='WDWW4'></tfoot><legend id='WDWW4'><style id='WDWW4'><dir id='WDWW4'><q id='WDWW4'></q></dir></style></legend>

                  <i id='WDWW4'><tr id='WDWW4'><dt id='WDWW4'><q id='WDWW4'><span id='WDWW4'><b id='WDWW4'><form id='WDWW4'><ins id='WDWW4'></ins><ul id='WDWW4'></ul><sub id='WDWW4'></sub></form><legend id='WDWW4'></legend><bdo id='WDWW4'><pre id='WDWW4'><center id='WDWW4'></center></pre></bdo></b><th id='WDWW4'></th></span></q></dt></tr></i><div id='WDWW4'><tfoot id='WDWW4'></tfoot><dl id='WDWW4'><fieldset id='WDWW4'></fieldset></dl></div>
                • 本文介绍了Maven docker缓存依赖的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在尝试使用 docker 来自动化 maven 构建.我要构建的项目需要将近20分钟才能下载所有依赖项,所以我尝试构建一个可以缓存这些依赖项的docker镜像,但它似乎没有保存它.我的 Dockerfile 是

                  I'm trying to use docker to automate maven builds. The project I want to build takes nearly 20 minutes to download all the dependencies, so I tried to build a docker image that would cache these dependencies, but it doesn't seem to save it. My Dockerfile is

                  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 compile 时,它会经历整整 20 分钟的重新下载所有内容.

                  The image builds, and it does download everything. However, the resulting image is the same size as the base maven:alpine image, so it doesn't seem to have cached the dependencies in the image. When I try to use the image to mvn compile it goes through the full 20 minutes of redownloading everything.

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

                  Is it possible to build a maven image that caches my dependencies so they don't have to download everytime I use the image to perform a build?

                  我正在运行以下命令:

                  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
                  

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

                  My understanding is that whatever RUN does during the docker build process becomes part of the resulting image.

                  推荐答案

                  通常,pom.xml 文件没有变化,只是在您尝试启动 docker image 时其他一些源代码发生了变化建造.在这种情况下,您可以这样做:

                  Usually, there's no change in pom.xml file but just some other source code changes when you're attempting to start docker image build. In such circumstance you can do this:

                  仅供参考:

                  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 文件.

                  然后mvn verify --fail-never,它会下载maven依赖.

                  then mvn verify --fail-never it, it will download maven dependencies.

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

                  add all your source file then, and start your compilation(mvn package).

                  当你的 pom.xml 文件有变化或者你是第一次运行这个脚本时,docker 会做 1 -> 2 -> 3.当没有变化时在pom.xml文件中,docker会跳过第1、2步,直接做第3步.

                  When there are changes in your pom.xml file or you are running this script for the first time, docker will do 1 -> 2 -> 3. When there are no changes in pom.xml file, docker will skip step 1、2 and do 3 directly.

                  这个简单的技巧可以用于许多其他包管理环境(gradle、yarn、npm、pip).

                  This simple trick can be used in many other package management circumstances(gradle、yarn、npm、pip).

                  您还应该考虑使用 mvn dependency:resolvemvn dependency:go-offline 相应地作为其他注释 &答案建议.

                  You should also consider using mvn dependency:resolve or mvn dependency:go-offline accordingly as other comments & answers suggest.

                  这篇关于Maven docker缓存依赖的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:Docker 图像 - 类型.修身vs修身弹力vs弹力vs高山 下一篇:在 docker 镜像中部署 WAR 文件的正确方法

                  相关文章

                  最新文章

                    <legend id='Zsuwx'><style id='Zsuwx'><dir id='Zsuwx'><q id='Zsuwx'></q></dir></style></legend>
                      <tfoot id='Zsuwx'></tfoot>
                      <i id='Zsuwx'><tr id='Zsuwx'><dt id='Zsuwx'><q id='Zsuwx'><span id='Zsuwx'><b id='Zsuwx'><form id='Zsuwx'><ins id='Zsuwx'></ins><ul id='Zsuwx'></ul><sub id='Zsuwx'></sub></form><legend id='Zsuwx'></legend><bdo id='Zsuwx'><pre id='Zsuwx'><center id='Zsuwx'></center></pre></bdo></b><th id='Zsuwx'></th></span></q></dt></tr></i><div id='Zsuwx'><tfoot id='Zsuwx'></tfoot><dl id='Zsuwx'><fieldset id='Zsuwx'></fieldset></dl></div>

                      <small id='Zsuwx'></small><noframes id='Zsuwx'>

                        <bdo id='Zsuwx'></bdo><ul id='Zsuwx'></ul>