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

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

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

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

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

nexus-releases * [http://47.112.201.193:8081/nexus/content/groups/public](http://47.112.201.193:8081/nexus/content/groups/public)

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

2. 谨慎配置 mirrorOf 为 *

比如

nexus-aliyun-public * Nexus aliyun https://maven.aliyun.com/nexus/content/groups/public


     
  nexus-snapshots     
  snapshots     
  http://47.112.201.193:8081/nexus/content/repositories/snapshots     
	

那么 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一般这样设置:

  
X:\工具\maven资源\repository 

  
 
 
 
nexus-aliyun 
Nexus aliyun 
central
 http://maven.aliyun.com/nexus/content/groups/public 
 

 nexus-mine 
Nexus mine 
* 
http://xx.xx.xx.xx/nexus/content/groups/public 

 
  

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 。

你可能感兴趣的:(#,Maven,maven)