首页 > 解决方案 > 通过本地 pom 禁用 Maven 设置镜像

问题描述

在我的 maven settings.xml 中有以下代码段:

<mirrors>
    <mirror>
        <!--This sends everything to our company mirror -->
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>[company-mirror]</url>
    </mirror>
</mirrors>

这会将所有内容发送到我们公司的镜像,如果无法解析,我们将从 maven 存储库中获取它。

现在,我们还通过他们的 maven nexus 从我们的一种技术的供应商那里收到错误修复。问题是我们公司的镜像不会自动查询这个关系,我可以很容易地在 settings.xml 中提供以下镜像编辑:

<mirrors>
  <mirror>
    <id>[vendor-id]</id>
    <mirrorOf>[vendor-mirror]</mirrorOf>
    <url>[vendor-url]</url>
 </mirror>
 <mirror>[company-mirror-settings]</mirror>
</mirrors>

然后它会很好地查询,但我们不能为我们公司维护的构建服务器执行此操作,它只查询公司镜像。

有没有办法在我们本地的 pom.xml/project 中做到这一点而无需触及任何外部设置?

我尝试在我们的 pom.xml 中进行以下操作,但没有成功:

<project>
...
<repositories>
    <repository>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <id>[vendor-id]</id>
        <name>[vendor-name]</name>
        <url>[vendor-url]</url>
    </repository>
</repositories>
...
</project>

运行 mvn clean install 得到以下错误:

[ERROR] Failed to execute goal on project <project-name>: Could not resolve dependencies for project <project-name>:jar:1.2.0-SNAPSHOT: Coul
d not find artifact <vendor-dependency> in <company-mirror>

标签: javamaven

解决方案


中的镜像定义settings.xml允许重载默认central存储库以及 POM 中定义的任何存储库。因此,如果您的构建服务器使用您的公司管理的存储库定义为的设置文件<mirrorOf>*</mirrorOf>,它将为每个 POM 定义的存储库使用它,并且基本上忽略这些定义。

因此,要么settings.xml应修改构建服务器使用的存储库,以便并非所有存储库都被镜像,要么应将公司管理的存储库配置为镜像供应商的存储库。

Maven 文档:为存储库使用镜像


推荐阅读