本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,若是没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不须要从远程下载了。若是你所须要的jar包版本在本地仓库没有,并且也不存在于远程仓库,Maven在构建的时候会报错,这种状况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。java
Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。固然你能够经过修改${user.home}/.m2/settings.xml 配置这个地址:apache
Xml代码maven
<settings> 工具
… url
<localRepository> D:/java/repository</localRepository> spa
… .net
</settings> 代理
若是你想让全部的用户使用统一的配置那么你能够修改Maven主目录下的setting.xml:code
${M2_HOME}/conf/setting.xmlserver
repository是指在局域网内部搭建的repository,它跟central repository, jboss repository等的区别仅仅在于其URL是一个内部网址
mirror则至关于一个代理,它会拦截去指定的远程repository下载构件的请求,而后从本身这里找出构件回送给客户端。配置mirror的目的通常是出于网速考虑。
不过,不少internal repository搭建工具每每也提供mirror服务,好比Nexus就可让同一个URL,既用做internal repository,又使它成为全部repository的mirror。
高级的镜像配置:
1.<mirrorOf>*</mirrorOf>
匹配全部远程仓库。 这样全部pom中定义的仓库都不生效
2.<mirrorOf>external:*</mirrorOf>
匹配全部远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配全部不在本机上的远程仓库。
3.<mirrorOf>repo1,repo2</mirrorOf>
匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。
4.<mirrorOf>*,!repo1</miiroOf>
匹配全部远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
mirrors能够配置多个mirror,每一个mirror有id,name,url,mirrorOf属性,id是惟一标识一个mirror就很少说了,name貌似没多大用,至关于描述,url是官方的库地址,mirrorOf表明了一个镜像的替代位置,例如central就表示代替官方的中央库。
我本觉得镜像库是一个分库的概念,就是说当a.jar在第一个mirror中不存在的时候,maven会去第二个mirror中查询下载。但事实却不是这样,当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其余的mirror地址查询。
后来终于知道,maven的mirror是镜像,而不是“分库”,只有当前一个mirror没法链接的时候,才会去找后一个,相似于备份和容灾。
还有,mirror也不是按settings.xml中写的那样的顺序来查询的。
所谓的第一个并不必定是最上面的那个。
当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,因此无论怎么排列,必定会找到A这个mirror来进行查找,当A没法链接,出现意外的状况下,才会去B查询。
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>repo-iss</id> <username>deployment</username> <password>deployment123</password> </server> </servers> <mirrors> <!-- osc镜像 --> <mirror> <!-- 镜像全部远程仓库,但不包括指定的仓库 --> <id>mirror-osc</id> <mirrorOf>external:*,!repo-osc-thirdparty,!repo-iss</mirrorOf> <url>http://maven.oschina.net/content/groups/public/</url> </mirror> <!-- <mirror> <id>mirror-iss</id> <mirrorOf>external:*</mirrorOf> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> </mirror> --> </mirrors> <profiles> <profile> <id>profile-default</id> <repositories> <repository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>repo-osc-thirdparty</id> <url>http://maven.oschina.net/content/repositories/thirdparty/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <id>profile-iss</id> <repositories> <repository> <id>repo-iss</id> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo-iss</id> <url>http://10.24.16.99:5555/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>profile-default</activeProfile> <!--<activeProfile>profile-iss</activeProfile>--> </activeProfiles> <!-- <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>10.10.204.160</host> <port>80</port> </proxy> </proxies> --> </settings>