目录
对于maven来说,仓库分为两类:本地仓库
和远程仓库
。
远程仓库又分为:中央仓库+私服+其它公共远程仓库
1、在Maven中涉及仓库
-
工作空间,即我们的项目工程,这里面可能会放着pom.xml文件,这个pom.xml就是maven的配置文件
-
本地仓库,本地仓库用于存放jar包,其实Jar包并不是直接放入工作空间的,它是存放在本地仓库,然后在执行发布打包的时候,添加依赖路径
-
中央仓库:Maven中央存储库是由Maven社区提供的资源库。它包含了大量的常用程序库。它不要求配置,搜索时需要互联网接入
-
私库:是架设在本机或者局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库,用于缓解频繁从外网下载jar包资源的压力。而且使用私库作为缓存层,也相对安全一些。
-
其它共享仓库:除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有Java.NET Maven库(http://download.java.net/maven/2/)和jboss Maven库(http://repository.jboss.com/maven2/)等
下面为表达项目、本地仓库、远程仓库(共享仓库)之间的关系
2、Maven 依赖库搜索顺序
当我们在pom中声明了依赖关系后,参考上面的图:
当我们执行 Maven 构建命令,Maven 依赖库按以下顺序进行搜索:
1. Maven在执行相关的任务时,会先去本地仓库查看是否有该资源,如果有的话,判断版本是否正确,如果一切都没问题则直接使用;否则,执行下一步
2. Maven会去配置的中央仓库中查找,如果找到就拷贝到本地仓库中;找不到则会给出相关的提示
3. Maven在本地如果搭建了私库,则会去私库中查找,找到就拷贝到本地仓库;找不到就会去中央仓库中查找,然后放入私库和本地库。(有了私库,局域网内的开发者可以共享依赖,就不用每个人都去外网下载jar包,浪费带宽了。)
3、本地仓库位置
windows系统中本地仓库默认路径在我们C盘目录下,对于专业人士来说C盘很危险,下面修改一下默认配置。(关于本地仓库和共享仓库的配置都在settings.xml中,这个文件位于conf中,如果没有则拷贝一份即可。)
在自己的用户目录下都有一个路径名为.m2/repository/
的仓库目录。编辑文件~/.m2/settings.xml,设置localRepository
元素的值为想要的仓库地址
<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">
<localRepository>D:\apache-maven-3.5.0\repository</localRepository>
</settings>
(如果未出现.m2文件夹,可以运行 mvn help:system生成
默认情况下,${user:home}/.m2/settings.xml文件是不存在的,用户需要从Maven安装目录复制${user:home}/conf/settings.xml文件再进行编辑 )
4、中央仓库
Maven的安装文件自带了中央仓库的配置。
使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.5.jar(我的路径:D:\apache-maven-3.8.1\lib),然后访问路径:org/apache/maven/model/pom-4.0.0.xml,可以看到如下的配置:(可以通过Central Repository:访问远程仓库 )
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
5、私服
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。