通过本地Pom禁用Maven设置镜像

时间:2019-03-08 07:48:26

标签: java 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联系从某一种技术的供应商那里收到了错误修复。问题是我们公司的镜像不会自动查询此关系,我可以在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全新安装会出现以下错误:

[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>

1 个答案:

答案 0 :(得分:1)

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

因此,应该修改构建服务器使用的<mirrorOf>*</mirrorOf>,以便并非所有存储库都得到镜像,或者应该将公司管理的存储库配置为镜像供应商的存储库。

Maven documentation: Using Mirrors for Repositories