Maven仓库
maven仓库分类:
本地仓库(也就是.m2文件夹下的):本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
<settings> <localRepository>D:/m2/repository</localRepository> </settings>
远程仓库,除了本地仓库都是远程仓库
1、中央仓库,中央仓库默认就是告诉Maven从外网的哪个地方下载jar包。Maven的安装目录中,在lib目录下,maven-model-builder-3.1.0.jar中,有一个默认的pom.xml文件。其中就配置了Maven默认连接的中心仓库
默认仓库地址是:https://repo.maven.apache.org/maven2/,可以通过修改/conf/settings.xml文件来修改默认的中央仓库地址
<profile> <id>repository-profile</id> <repositories> <repository> <id>central</id> <name>Central Repository</name> <layout>default</layout> <url> http://maven.aliyun.com/nexus/content/groups/public </url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile>
2、私服仓库(可以是自己创建的,也可以是其他主体创建的(例如阿里云的maven仓库,jBoss的maven仓库))
Maven 依赖搜索顺序
1、在本地仓库中寻找,如果没有是默认进入中央仓库查找,要进私服仓库需要/conf/settings配置或者在maven项目的pom文件中配置。
一般中央仓库会 修改为国内仓库地址(因为国外地址太慢),或者设置一个镜像仓库
2、在全局应用的私服仓库中寻找,如果没有则进入下一步。
3、在项目自身的私服仓库中寻找,如果没有则进入下一步。
4、在中央仓库中寻找,如果没有则终止寻找。
以上换句话说就是:本地仓库->profile->pom中的repository ->mirror/中央仓库
- 如果在找寻的过程中,如果发现该仓库有镜像设置,则用镜像的地址代替。
- 如果仓库的id设置成“central”,则该配置会覆盖maven默认的中央仓库配置。
默认情况下,Maven下载jar包将直接连接到中央仓库即默认的http://repo1.maven.org/maven2/去下载;如果想设置本地先进私服,两种配置方法:
/conf/settings配置 或者 在 maven项目的pom文件中配置
<profile> <id>default</id> <repositories> <repository> <id>nexus</id> <name>local private nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>local private nexus</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile>
Maven镜像:
maven默认的中央仓库速度很慢,可以镜像一个阿里云的仓库,有如下两种方式:
1、针对所有项目修改中央仓库
settings.xml里配置mirrors
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
2、分别给每个不同的项目配置中央仓库
在maven项目的pom.xml里配置如下:
<repositories> <repository> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
关于镜像仓库备注:
我本以为镜像库是一个分库的概念,就是说当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查询。
作者:danielJinyu
本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接
Github:https://github.com/DanielJinyu