Maven仓库:
1.在某个位置统一存储所有Maven项目共享的构件,而实际的Maven项目中则不再各自存储依赖文件。
2.只需在pom文件中声明所需要的依赖,然后在需要依赖的时候(例如:测试,编译的时候引入这些依赖)即可。
3.而在打包的时候,maven文件会将这些依赖打包到包中,保证运行时不会出现依赖缺失的情况。
仓库布局:
仓库是基于简单文件系统进行管理,其在系统的路径遵循:groupId/artifactId/version/artifactId-version.packaging
如log4j该依赖,其坐标为log4j:log4j:1.2.15,其文件路径为:log4j/log4j/1.2.15/log4j-1.2.15.jar
注:根据这个原理,如果我们无法获得某个依赖时,可以在本地仓库中检查指定的路径的依赖是否存在,如果不存在,则需要确定是否有其他版本可用等等
仓库的分类:
Maven仓库只分本地仓库和远程仓库。而远程仓库又可分成中央仓库,私服,第三方仓库。
其图解如下:
依赖寻找流程:
1.在本地仓库中,根据Maven坐标系寻找指定依赖,如果存在,直接返回
2.如果Maven仓库中不存在,或者需要检查依赖的版本时,maven则会去远程仓库中寻找,下载到本地仓库中再使用
本地仓库
配置:
在setting文件中,增加localRepository元素进行设置,格式如下:
<settings>
<localRepository>D:\xxx\xxx</localRepository>
</settings>
将某个模块编译打包,发布到本地仓库中,提供给其他项目使用:
在项目中采用mvn clean install命令进行安装,将模块安装到Maven本地仓库中
中央仓库
中央仓库是Maven配置文件中默认的仓库地址,如果用户没有修改仓库配置,那么Maven默认会从中央仓库下载依赖。
其在超级POM文件中的配置如下:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enable>false</enable>
</snapshots>
</repository>
</repositories>
其中,id指明了他是中央仓库,name用来表示该仓库。url是该仓库地址,layout使用的是默认的仓库布局(该布局和上面提到的文件路径一样,这里不深入研究仓库布局),snapshots表示是从仓库中下载snapshot依赖的相关配置。enable为false表示不会从该仓库下载快照版本的依赖
私服:
私服是一种特殊的远程仓库,其内容是来自于其他的远程仓库,一般架设在局域网内,提供给一个组织的人员使用。当Maven需要下载依赖时,从私服请求,如果私服上不存在该依赖,则从其他远程仓库下载,同时缓存在私服上,提供给其他人使用。如果项目中的一些内部模块,无法发布到外部远程仓库中,也可发布在私服上,提供给项目中的其他人员使用。
优势:
1.节省外网带宽
2.加速Maven构建
3.部署第三方构件
4.提供稳定性,增强控制
5.降低中央仓库的负荷