maven 配置mirror 与repository 以及它们之间的配置优先级

转载留存,原文地址:maven 配置mirror 与repository 以及它们之间的配置优先级 | 航行学园 (voycn.com)

一般公司都是有maven的私服即自己的仓库。 因此一般配置maven的时候都需要会配置一个 公司的maven私服与一个 比如 阿里云的maven仓库这样来用。 最近 胡乱配置了mirror 与 repository 导致 jar 下载不成功, 打包不成功。 于是重新了解了一下 maven 镜像仓库

1. 为什么还需要配置多一个maven公共仓库而不是仅仅一个maven私服即可?

比如在setting.xml 下配置一个私服的

<mirror> <id>nexus-releases</id> <mirrorOf>*</mirrorOf> <url>[http://47.112.201.193:8081/nexus/content/groups/public](http://47.112.201.193:8081/nexus/content/groups/public)</url> </mirror>

如果仅仅是配置一个maven私服的话,一般情况下是没有问题的。 但是可能并不好用。比如 maven私服没有的jar 包 就会取 maven 公共仓库取下载。 但是 这个 maven 公共仓库是国外的地址,可能会非常慢甚至 下载不来对应的jar. 因此就需要 额外多配置一个 公共的maven 仓库,比如 阿里云的maven库

2. 谨慎配置 mirrorOf 为 *

比如

<mirror> <id>nexus-aliyun-public</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>https://maven.aliyun.com/nexus/content/groups/public</url>

</mirror>
<mirror>     
  <id>nexus-snapshots</id>     
  <mirrorOf>snapshots</mirrorOf>     
  <url>http://47.112.201.193:8081/nexus/content/repositories/snapshots</url>     
</mirror>	

那么 maven 读取mirror 配置是 从上往下读取的。 如果 mirrorOf 配置为 * 在 第一个个。 说明了 所有的 远程 jar 都是通过 nexus-aliyun-public 这个 mirror 去下载了,忽略了 nexus-snapshots 这个镜像配置。 如果 nexus-snapshots 是私服的话,那么 公司私服的jar 就都下载不来了。就算自己手动下载了,那么 maven 编译打包的时候也会报错 比如

maven resolution will not be reattempted until the update interval of nexus-aliyun has elapsed or up

等等 说是 xxxjar 下载不了的 问题。 那么 配置顺序应该是 mirrorOf 配置为 * 应该是在最后一个位置 参考

https://www.cnblogs.com/li1111xin/p/4777965.html

https://blog.csdn.net/wuqilianga/article/details/79094314

https://blog.csdn.net/LD799989470LD/article/details/80257725

https://www.cnblogs.com/ctxsdhy/p/8482725.html

1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址

2、mirrorOf等于*的时候覆盖所有repository配置

3、存在多个mirror配置的时候mirrorOf等于*放到最后

4、只配置mirrorOf为central的时候可以不用配置repository

我的settings.xml一般这样设置:

<?xml version="1.0" encoding="UTF-8"?> <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 http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
<localRepository>X:\工具\maven资源\repository</localRepository> 
<pluginGroups></pluginGroups>
 <proxies></proxies> 
<servers></servers> 
<mirrors> 
<mirror> 
<id>nexus-aliyun</id> 
<name>Nexus aliyun</name> 
<mirrorOf>central</mirrorOf>
 <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror> 
<mirror>
 <id>nexus-mine</id> 
<name>Nexus mine</name> 
<mirrorOf>*</mirrorOf> 
<url>http://xx.xx.xx.xx/nexus/content/groups/public</url> 
</mirror>
 </mirrors>
 <profiles></profiles> 
</settings>

nexus-aliyun使用阿里云的镜像作为central中央仓库

nexus-mine作为私服,mirrorOf配置为*来提供中央仓库中不存在的jar包

3. mirror 与 repository 配置优先级

mirror 优先级 高于 repository 配置。 特别是 mirror 配置了 mirrorOf等于 * , 那么 repository 配置就失效了。 参考 https://www.jianshu.com/p/c2ca01cdcb6e

maven获取真正起作用的repository集合流程:

首先会获取pom.xml里的repository集合,然后在settings.xml里找mirrors元素;

如果repository的id和mirror的mirrorOf的值相同,则该mirror替代该repository;

如果该repository找不到对应的mirror, 则使用其本身,依此可以得到最终起作用的repository集合, repositories中默认包含了中央仓库central,当然也可以重新它的url;

可以理解mirror是复写了对应id的repository

即 mirror 不是配置 mirrorOf等于 * , 那么最终的 获取远程 jar 就会 结合 mirror 与 repository 配置一起 获取都所有的远程maven 仓库。 然后 一个仓库一个仓库取找jar 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值