maven - Maven/Docker:缓存所有依赖项
问题描述
我正在尝试在 docker 容器中构建/部署 spring boot。
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 命令(包)的日志:
[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/s 时的 0 B)有点奇怪……只是检查一下?)
如果我根据第一个 maven 命令(mvn 依赖项:...)之后的步骤启动容器(应该缓存所有依赖项的那个)
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
该库似乎在那里,但我可以在 mvn 包的日志中看到这一点:
[信息] 从 spring-releases 下载:https ://repo.spring.io/libs-release/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.jar
如果我在离线模式下运行 mvn package ,它会失败,因为它无法访问https://repo.spring.io/libs-release。
所以看起来它被缓存了,但 maven 仍然尝试下载这个文件。我已经在我的 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>
但是没有效果。
任何想法?谢谢!
解决方案
我终于通过使用 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>
并尝试使用以下方法获取所有依赖项:
mvn de.qaware.maven:go-offline-maven-plugin:resolve-dependencies
推荐阅读
- android - 向 TextView 添加效果
- google-apps-script - 如何从应用程序脚本中使用 Google 表格查询或 Google 可视化 api?
- python - 根据行数连接两个数据帧
- html - 带有纸张输入的 Polymer 1.x 插入图像
- amazon-web-services - 将 Kubernetes 流量暴露给 80 (http) 和 443 (https)
- ios - iOS 上的 ubiquity 容器中的文件书签问题
- c# - 创建新视图时如何初始化视图模型中的属性?
- windows - 批处理命令根据文件名创建文件夹并将文件/文件夹移动到创建的文件夹
- vba - ms 访问替换功能 大写小写字母混乱
- html - 如果我在按钮中有一个图像,并且按钮的宽度在悬停时增加,我如何将图像的位置固定在最初的位置?