maven打包编译时默认先寻找本地仓库的jar包,但本地仓库找不到时会请求远程仓库,本篇主要讲下如何通过配置控制远程仓库的调用顺序。
1.<repositories>
- 在setting.xml和项目的pom.xml文件中都可以使用<repositories>,可以在它下面添加多个<repository> ,每个<repository>都有ID,一个描述性的name,以及远程仓库的url。
- maven会按顺序查找这些配置的远程库,需要注意的是,pom.xml中的<repository>优先级高于setting.xml中的<repository>,会被优先查找。
- setting中的<repositories>不被直接支持,需要在<profiles>中配置。
2.<mirrors>
- <mirrors>是setting.xml中的配置,是用于替代指定远程仓库的镜像服务器配置,可配置多个<mirror>,每个<mirror>有一个id,一个描述性的name,镜像url和<mirrorOf>。
- 多个 mirror 优先级 按照 id字母顺序进行排列(即与编写的顺序无关)在第一个 mirror 找不到 artifact, 不会继续超找下一个镜像。只有当 mirror 无法链接的时候, 才会尝试链接下一个镜像, 类似容灾备份。
- 主要说下<mirrorOf>,<mirrorOf>里填写被镜像服务器的id,这个id就是上面<repository>的id,可以填写多个,用逗号隔开,也可以填写通配符,具体语法不在这里详细说明。远程仓库id被填写在这里后,当maven访问此远程仓库(即访问<repository\的url时)会被镜像到访问<mirror>中的url。所以说<mirror>的优先级是高于<repository>。
总的来说访问优先级的排序是:<mirror>高于pom.xml中的<repository>高于setting.xml中的<repository>。 - 如果配置的是<mirror>*</mirror>,则所有远程库请求都会被镜像,不推荐使用。