Maven/Docker:缓存所有依赖项 [英] Maven/Docker: cache all dependencies

查看:400
本文介绍了Maven/Docker:缓存所有依赖项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Docker容器中构建/部署Spring Boot.

I'm trying to build/deploy a spring boot in a docker container.

FROM maven:3.5.3-jdk-8-slim AS build
COPY ./pom.xml /app/pom.xml
RUN cd /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:go-offline dependency:resolve-plugins -B
COPY . /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml --batch-mode package -DskipTests

如您所见,我正在使用第一个mvn命令缓存所有依赖项,以使我的代码应用程序中的每次更改都不会触发新的依赖项下载. 它适用于大多数依赖项,但有些仍被下载(即使已缓存). 这是第二个mvn命令(软件包)的日志:

As you can see, I'm caching all dependencies with the first mvn command so that every change in my code app will not trigger a new bulk of dependencies downloads. It works for most of the dependencies but some are still downloaded (even if cached). This is the log of the second mvn command (package):

[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< xxx:xxx >----------------------
[INFO] Building xxxx 0.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- apt-maven-plugin:1.1.3:process (default) @ vsol-java ---
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom
[INFO] Downloaded from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom (0 B at 0 B/s)
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/commons-io/commons-io/1.3.2/commons-io-1.3.2.pom
[INFO] Downloaded from spring-releases: https://repo.spring.io/libs-release/commons-io/commons-io/1.3.2/commons-io-1.3.2.pom (0 B at 0 B/s)
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-parent/3/commons-parent-3.pom
[INFO] Downloaded from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-parent/3/commons-parent-3.pom (0 B at 0 B/s)
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar
...

(顺便说一句,(0 B在0 B/s时有点奇怪...只是检查一下?)

(BTW, the (0 B at 0 B/s) is a little bit strange...just a check?)

如果我根据第一个maven命令之后的步骤启动一个容器(mvn依赖项:...)(应该缓存所有依赖项的容器)

If I launch a container based on the step after the first maven command (mvn dependency:...) (the one that should cached all dependencies)

root@3281a837a236:/usr/share/maven/ref/repository# ls -lh org/codehaus/plexus/plexus-utils/1.5.15
total 244K
-rw-r--r-- 1 root root  202 Oct 19 12:07 _remote.repositories
-rw-r--r-- 1 root root 223K Oct 19 12:07 plexus-utils-1.5.15.jar
-rw-r--r-- 1 root root   40 Oct 19 12:07 plexus-utils-1.5.15.jar.sha1
-rw-r--r-- 1 root root 6.7K Oct 19 12:07 plexus-utils-1.5.15.pom
-rw-r--r-- 1 root root   40 Oct 19 12:07 plexus-utils-1.5.15.pom.sha1

lib似乎在那里,但是我可以在mvn包的日志中看到它:

The lib seems to be there but, I can see this in the log from mvn package:

[INFO]从spring-releases下载: https://repo.spring.io/libs-release/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar

[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar

如果我以脱机模式运行mvn软件包,则失败,因为它无法访问 https://repo.spring.io/libs-release .

If I run mvn package in offline mode, it fails because it can't reach https://repo.spring.io/libs-release.

因此,看起来它已被缓存,但是maven仍尝试下载此文件. 我已经在我的pom.xml中尝试过了

So it looks like it is cached but maven still try to download this file. I've tried this in my pom.xml

        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>

但没有效果.

有什么主意吗? 谢谢!

Any idea? Thanks!

推荐答案

我终于通过使用go-offline-maven-plugin找到了解决方案.

I finally find the solution by using go-offline-maven-plugin.

         <plugin>
            <groupId>de.qaware.maven</groupId>
            <artifactId>go-offline-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <dynamicDependencies>
                    <DynamicDependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit4</artifactId>
                        <version>2.20.1</version>
                        <repositoryType>PLUGIN</repositoryType>
                    </DynamicDependency>
                </dynamicDependencies>
            </configuration>
        </plugin>

并尝试使用以下方法获取所有依赖项:

And trying to get all dependencies using:

mvn de.qaware.maven:go-offline-maven-plugin:resolve-dependencies

这篇关于Maven/Docker:缓存所有依赖项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆