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仓库只分本地仓库和远程仓库。而远程仓库又可分成中央仓库,私服,第三方仓库。

其图解如下:

druid maven 仓库 maven仓库结构_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.降低中央仓库的负荷