我有一个maven项目,有一些自定义的依赖项驻留在一个私有仓库中,我正尝试基于其中一个maven映像创建一个docker映像,这些依赖项已预先加载到本地maven仓库中。
停靠文件
FROM maven:3.8.6-openjdk-11-slim
COPY settings-docker.xml /usr/share/maven/ref/
COPY bom.xml /tmp
RUN mvn -B -f /tmp/bom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:resolve
settings-docker.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/usr/share/maven/ref/repository</localRepository>
<mirrors>
<mirror>
<id>Mirror of Private Repo</id>
<mirrorOf>Private Repo</mirrorOf>
<name>allows http</name>
<url>http://here.it.is/repository/</url>
</mirror>
</mirrors>
</settings>
bom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.myproject</groupId>
<artifactId>bom</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<repositories>
<repository>
<id>Private Repo</id>
<url>http://here.it.is/repository/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>codec</groupId>
<artifactId>codec</artifactId>
<version>1.10.0.</version>
</dependency>
</dependencies>
</project>
我按照官方maven映像中的instructions,使用**/usr/share/maven/ref/repository作为预加载的依赖项。映像构建成功,当我启动它时,我可以在/usr/share/maven/ref/repository和/root/.m2/repository**中看到我的依赖项。
尽管如此,当我运行maven时,它总是试图连接到我的私有存储库,这是一些我不知道的maven行为还是它忽略了我的存储库?
1条答案
按热度按时间b1zrtrql1#
我相信您已经遇到了“增强的本地存储库管理器”功能:
增强的本地资料档案库管理器构建于经典的Maven 2.0本地资料档案库结构之上,但还跟踪从哪些资料档案库解析了缓存的对象。如果当前解析请求与对象的已知源资料档案库不匹配,则本地缓存的对象的解析将被拒绝,从而模拟每个远程资料档案库的物理分离的对象缓存。
例如:
您可以通过在maven opts中指定
-llr
来禁用该特性,或者研究如何强制maven在不同的场景中使用相同的“repository id”。