maven 配置文件setting.xml中的mirrorOf与repository节点一直分不太清楚,现在根据自己的整理归纳一下:
1.maven中的仓库(Repository)有哪些类型?
包括本地仓库(配置文件中的localRepository节点指定的一个文件夹)和远程仓库,其中远程仓库又可以分中央仓库、私服仓库,中央仓库是maven官方指定的仓库,可以理解为“寻找的最后一站”。私服可以是公司内部搭建的Maven仓库管理器像阿里的一些仓库也可以是自己搭建的;
2.项目下载依赖的顺序是怎么样的?
本地仓库---->私服----->中央仓库
3.什么是mirror?
仓库的镜像,就是说如果一个仓库(repository)配置了对应的mirror,那么在需要从这个仓库下载依赖的时候会自动请求mirror中的地址;比如以下配置,对ali_mirro的请求会自动被重定向到id为ali中的url
<?xml version="1.0" encoding="utf-8"?>
<settings>
<mirrors>
<mirror>
<id>ali</id>
<mirrorOf>ali_mirro</mirrorOf>
<name>ali</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<id>ali_mirro</id>
<name>ali_mirro</name>
<url>http://xxxx/</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
</settings>
4.mirrorOf的写法
* 代表所有,就是说所有在本地仓库无法找到的依赖都会去该mirror中查找 ;
external:* 就是说如果一个依赖可以在localhost的或者基于文件的仓库中可以找到,就不会请求该mirror,示例:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<mirrors>
<mirror>
<id>second</id>
<mirrorOf>external:*</mirrorOf>
<name>ali</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<id>ali_mirro</id>
<name>ali_mirro</name>
<url>http://localhost:8888/****</url>
<layout>default</layout>
</repository>
</repositories>
</profile>
</profiles>
</settings>
该配置中,如果可以在ali_mirro中找到依赖,是不会去second中找的,什么是基于文件的仓库呢,就是这种:
<repository>
<id>my-repo</id>
<url>file:///C:\my-repo</url>
</repository>
相当于在指定的文件夹中寻找
repo,repo1 这种相当于去repo和repo1中寻找;
*,!repo1 这种相当于去除了repo1的仓库中寻找
参考:
http://maven.apache.org/settings.html
https://stackoverflow.com/questions/41244789/maven-mirror-tag-meaning-of-external-parameter