Maven之坐标和依赖_jerry_dyy的博客-CSDN博客
Maven之聚合与继承_jerry_dyy的博客-CSDN博客
Maven之生命周期和插件_jerry_dyy的博客-CSDN博客
Maven会根据构件的坐标去仓库中找构件。
仓库的布局:
默认为default布局:
Log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/1.2.15/log4j-1.2.15.jar。
路径与坐标的大致对应关系为:groupId/artifactId/version/artifactId-version.packaging。
仓库的分类:
Maven在根据坐标寻找构件的时候,首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库中不存在此构建 ,或者本地不是最新的版本,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有找到,Maven就会报错。
Maven仓库可以分为:本地仓库、远程仓库
其中远程仓库又分为:中央仓库、私服仓库、其他公共库
本地仓库:
本地仓库默认在~/.m2/repository目录下,可以通过settings.xml中的localRepository来配置,install命令可以安装构件到本地仓库。
中央仓库:
中央仓库是Maven核心自带的远程仓库,其snapshots元素的子元素enabled值为false,表示不从该中央仓库中下载快照版本的构件。
私服仓库:
私服是另一种特殊的远程仓库,用其代理所有外部的远程仓库,内部的项目还能部署到私服上供公司的其他项目使用。
好处包括节省网络带宽;加速Maven构建;可以部署第三方构件;提高稳定性;降低中央仓库的负荷。
镜像仓库:
仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。
镜像在settings.xml中通过<mirrors>来配置。
镜像与仓库的相同点:id、name、url与<repository>含义一样,如果镜像需要认证,也可以基于镜像id配置仓库认证。
一般是把私服配置为所有外部仓库的镜像。
由于镜像仓库完全屏蔽掉了被镜像仓库,当镜像仓库不稳定或是停止服务的时候,Maven将无法访问仓库镜像,因为无法下载构建。
仓库的配置:
远程仓库的配置:
在pom或settings.xml中配置<repositories>,可以包含多个<repository>,每个<repository>包含以下元素:
<id>:仓库的唯一标识;
<name>:仓库的命名,为了便于阅读;
<url>:url基于http协议,可以直接在浏览器中访问;
<layout>:仓库布局,默认为default;
<releases>:<enabled>元素为true,表示可以从该仓库下载发布版本;还包括<updatePolicy>、<checksumPolicy>元素;
<snapshots>:<enabled>元素为true,表示从该仓库可以下载快照版本,还包括<updatePolicy>、<checksumPolicy>元素。
<updatePolicy>:用于配置从远程仓库检查更新的频率,默认为daily(每天检查更新一次),还可以配置为:never(从不检查更新),always(每次构建都检查更新),interval:X(每隔X分钟检查更新一次)
<checksumPolicy>:配置Maven检查检验和文件的策略。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,怎么办?Warn(输出警告)、fail(构建失败)、ignore(忽略校验和错误)。
远程仓库的认证:
每个仓库提供了一组用户名和密码,认证信息必须配置在settings.xml,因为settings.xml在每个人的本地,而每个人的仓库权限是不同的。
在settings.xml中配置<servers>,包含一个或多个<server>,每个<server>中包含<id>、<username>、<password>。其中id必须与对应的<repository>的id一致。
部署至远程仓库:
POM中配置<distributionManagement>
版本说明:
SNAPSHOT:快照版本:
为了避免开发阶段,版本乱用
Xxx-SNAPSHOT
会解析为时间戳:比如2.1-20091214.221414-13,表示的是2009年12月14日,22点14分14秒构建的,第13次快照。
根据updatePolicy检查更新,-U可以强制Maven检查依赖更新。
项目不应该依赖任何组织外部的快照版本依赖,快照版本的不稳定性,会照成潜在的风险。
RELEASE: 最新发布版本
LATEST: 最新版本(包含快照)
Maven3之后,version不再支持RELEASE和LATEST,但是如果不写version,默认还是为RELEASE
仓库解析依赖机制:
1、如果依赖的版本是RELEASE或LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-meta-data.xml,将其与本地仓库对应的元素据合并后,计算出RELEASE或LATEST真实的值,然后基于该真实值去拉取依赖。
2、如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/maven-meta-data.xml,将其与本地仓库对应的元素据合并后,得到最新快照版本的值,然后基于该真实值去拉取依赖。
3、如果使用了-U,则忽略更新策略,强制检查更新。
仓库搜索服务:
通过仓库搜索服务可以根据artifactId等,搜索出想要的Maven构件,得到其准确的坐标信息,完善POM,引入依赖。
常用的仓库搜索服务网站:
Sonatype Nexus: Maven Central Repository Search