详解maven的设置配置文件中镜子和库的区别

  

当maven需要到的依赖jar包不在本地仓库时,就需要到远程仓库下载。
  

  

这个时候如果mavensetting。xml中配置了镜像,而且镜像配置的规则中匹配到目标仓库时,
  

  

maven认为目标仓库被镜像了,不会再去被镜像仓库下载依赖jar包,而是直接去镜像仓库下载。
  

  

简单而言,镜子可以拦截对远程仓库的请求,改变对目标仓库的下载地址
  

  

<强>库
  

  

库就是个仓库。
  

  

maven里有两种仓库,本地仓库和远程仓库。
  

  

远程仓库相当于公共的仓库,大家都能看的到。
  

  

本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。
  

  

当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。
  

  

如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。
  

  

远程仓库可以在工程的砰的一声。xml文件里指定。
  

  

如果没指定,默认会到http://repo1.maven.org/maven2这个地方去请求插件和依赖包。
  

        * & lt; repository>*      * & lt; snapshots>*      * & lt; enabled> false</enabled>*      * & lt;/snapshots>*      * & lt; id> central</id>*      * & lt; name> Maven存储库Switchboard*      * & lt; url> * * [http://repo1.maven.org/maven2 *      * & lt;/repository>*   之前      

本地仓库默认在你本地的用户目录下的。m2/库目录下。
  

  镜子

<强>
  

  

镜子就是镜像,主要提供一个方便地切换远程仓库地址的途径。
  

  

比如,上班的时候在公司,用电信的网络,连的是电信的仓库。
  

  

回到家后,是网通的网络,我想连网通的仓库,就可以通过镜子配置,统一把我工程里的仓库地址都改成联通的,而不用到具体工程配置文件里一个一个地改地址。
  

  

镜子的配置在.m2/settings.xml里。如:

        * & lt; mirrors>*      * & lt; mirror>*      * & lt; id> UK</id>*      * & lt; name>英国Central</name>*      * & lt; url> * * [http://uk.maven.org/maven2)(http://uk.maven.org/maven2%3C/url%3E%C2%A0%C2%A0) *      * & lt; mirrorOf> central</mirrorOf>*      * & lt;/mirror>*      * & lt;/mirrors>*   之前      

这样的话,就会给上面id为中心的远程仓库做了个镜像。
  

  

以后向中央这个仓库发的请求都会发到http://uk.maven.org/maven2而不是http://repo1.maven.org/maven2了。
  

  

& lt; mirrorOf> central里是要替代的仓库的id。
  

  

如果填*,就会替代所有仓库。
  

  

<强>高级镜像配置
  

  

为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
  

  

1。你们;mirrorOf> * & lt;/mirrorOf>
  匹配所有远程仓库。
  

  

2。你们;mirrorOf>外部:* & lt;/mirrorOf>
  匹配所有远程仓库,使用localhost的除外,使用文件://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
  

  

3。你们;mirrorOf> repo1 repo2
  匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
  

  

4。你们;mirrorOf> *, ! repo1
  匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
  

  

需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
  

  

<>强例子
  

  

个人的maven配置了阿里的镜像,而项目中需要使用到一些第三方jar包,为了方便引入,已上传到192.168.0.201的nexus私服下。
  但由于个maven阿人里的镜像使用默认mirrorOf规则=*,所有的仓库都被镜像,不会再去192.168.0.201下下载第三方jar包
  上传的第三方jar包目标路径:
  http://192.168.0.201:8081联系/内容/团体/公共/com/alipay/sdk - java/20170615110434/sdk - java - 20170615110434。pom
  

  

被镜像后路径:
  http://maven.aliyun.com/nexus/content/groups/public/com/alipay/sdk java/20170615110434/sdk - java - 20170615110434. - pom

详解maven的设置配置文件中镜子和库的区别