maven 中的mirror详解

一、前言

今天同事遇到个问题,本来公司是有maven私服的,但同事觉得上面有些东西下载不到,于是在自己本地的maven配置中加了:

 

<mirrors>

<mirror>
<id>bolRemoteid>
<mirrorOf>*mirrorOf>
<name>ctsname>
<url>http://192.168.19.210:8081/nexus/content/groups/public/url>
mirror>

<mirror>
 <id>aliyunid>
 <mirrorOf>centralmirrorOf>
 <name>ali yunname>
 <url>https://maven.aliyun.com/mvn/viewurl>
mirror>

mirrors>

 

然后下载个组件,说下载不下来。

 

二、解决

首先,这里我感觉很奇怪的是,下载时,加了-U,让其强制去私服下载。

但是我想的是,mirrorOf设为*之后,应该所有请求都会去私服下载啊,为啥日志里显示还去了aliyun的地址呢?

于是看了官方文档,也在本地进行了实验(wireshark抓包)。

抓包中看到了向aliyun.com发出的http请求,请求的地址为:

https://maven.aliyun.com/mvn/view/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.jar


前半部分,地址就是仓库url的地址,后半部分为要下载的artifact的地址。

相当于:

maven本地在查找仓库时,是先查找了完全匹配的仓库,然后再查找私服。查找到仓库后,直接在仓库url后,拼接对应的组件的地址,然后请求服务器。

 

三、官方文档的说明

http://maven.apache.org/guides/mini/guide-mirror-settings.html

这里也可以看出来,是先去查找完全匹配的仓库镜像。比如,我要查central仓库,然后发现mirrors中配置了镜像,然后就查找central完全匹配的镜像地址。

然后找到了就用它,没找到,就看看是否有通配符那种的镜像。(一般私服就是用的mirrorOf *,这时候就匹配上了)。

 

更多细节,直接看官方文档吧。就

http://maven.apache.org/guides/mini/guide-mirror-settings.html

 

同事的问题在于,那个仓库的url不对,改为:

http://maven.aliyun.com/nexus/content/groups/public/即可。

 

转载于:https://www.cnblogs.com/grey-wolf/p/10436310.html

你可能感兴趣的:(maven 中的mirror详解)