Maven settings配置中的mirrorOf

使用maven时,历来没仔细注意过setting配置节点的做用,直到今天配置老是不起做用,老是报错才开始去认识这些节点的含义。 html


这里就说mirrorOf,由于其余的怎么配置基本上都不会出错,只有mirrorOf会致使莫名其妙的错误,若是你还不了解mirrorOf,请往下看,你会认识到mirrorOf的重要做用的。 apache


主要参考来自: maven

Using Mirrors for Repositories  ide

若是你英文很不错,你能够去maven官方查看上面的介绍,上面的介绍主要说明了mirrorOf的用法和做用。 ui


或者在这里继续看下去: spa

先说mirrors中mirror的做用,mirrors容许配置多个镜像mirror,mirror的做用通常是为了使用一个更快速度的镜像,主要是访问速度的考虑,或者突破屏蔽使用能够访问的镜像。 htm


在maven中不配置mirror时使用的maven的中央库。 get


在maven中配置一个mirror时,mirror一般会设置成*,还有多是一个具体的值,还有多是逗号隔开的几个值.. it

例如: gui

1.*

2.repo3

3.repo1,repo2,*,!repo3

4.external:*

在上面4个例子中,第一个例子中*的意思就是(根据mirrorOf和repository的id)匹配全部的库(repository),这样就是说若是你须要某个jar,他会从镜像地址去下载这个jar。无论你配置了多少个库,即便这些库的地址不同,仍然会从镜像地址访问,这里就产生了问题。

问题:为何我配置好了库(repository),可是下载不下来(或者下载地址不对)?

这个问题已经很明白了,就是镜像(mirror)的问题。

问题:如何解决上述问题呢?

这里请继续看第二个例子和第三个例子。


第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的库,该库会使用repo3的镜像访问。这里说重点了,即便存在一个*的,这里会先查找彻底相同的存储库标识符匹配的镜像,若是找到了,就用匹配的,这里就是repo3,这点能够放心。若是找不到,那就去根据其余的mirrorOf查找去,查找到一个就使用。这里须要注意的是,若是存在多个重复的mirrorOf,只会用排名靠前的第一个(按照配置顺序来)。若是一个都没有,就会用maven中央库。


第三个例子是用逗号隔开的好几个,而且有一个特殊的!repo3,通常!的意思是非,这里的意思就是,就是排除repo3的状况。综合起来第三个的含义就是彻底匹配repo1,repo2和其余所有库,排除repo3库。


到这里,第二个问题已经有了答案,给这个库配置单独的镜像,并且位置尽可能在前面,id和mirrorOf一致。说到这两个一致,还得说两个不能一致的状况,就是mirror的mirrorOf不能和任何mirror的id一致,由于id在setting中惟一,mirrorOf要和库的id一致,因此势必不能和mirror的id一致,若是一致显然就起不到做用了(这里属于猜想,官方要求不能一致)。


第四个例子很特殊,含义就是匹配本地库以外的所有库。若是本地库存在,就用本地库的。


到这里,有关mirrorOf的内容说完了。

记录下我解决问题的思路和缘由以及解决办法,但愿对你有所帮助。

相关文章
相关标签/搜索