Docker容器内的Maven忽略本地存储库

jv4diomz  于 2022-12-17  发布在  Maven
关注(0)|答案(1)|浏览(192)

我有一个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行为还是它忽略了我的存储库?

b1zrtrql

b1zrtrql1#

我相信您已经遇到了“增强的本地存储库管理器”功能:
增强的本地资料档案库管理器构建于经典的Maven 2.0本地资料档案库结构之上,但还跟踪从哪些资料档案库解析了缓存的对象。如果当前解析请求与对象的已知源资料档案库不匹配,则本地缓存的对象的解析将被拒绝,从而模拟每个远程资料档案库的物理分离的对象缓存。
例如:

% cat ~/.m2/repository/org/springframework/spring-core/5.3.9/_remote.repositories 
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Wed Mar 16 08:49:28 AEDT 2022
spring-core-5.3.9.pom>internal-repository=
spring-core-5.3.9.pom>central=
spring-core-5.3.9.jar>central=
spring-core-5.3.9.jar>internal-repository=

您可以通过在maven opts中指定-llr来禁用该特性,或者研究如何强制maven在不同的场景中使用相同的“repository id”。

相关问题