Maven仓库布局方式:groupId/artifactId/version/artifactId-version.packaging
仓库分类:本地仓库,远程仓库(中央仓库,私服,其他公共库)
1. 本地仓库
默认Maven创建的仓库目录为: Linux: home/fdc/.m2/repository;Windows:C:\User\Administrator\.m2\
repository; 而自定义仓库目录地址配置为:
编辑setting.xml文件:
<settings>
<localRepository>D:\java\repository\</localRepository>
</settings>
2. 远程仓库-中央仓库
Maven的安装文件默认配置了中央仓库的地址:http://repo1.maven.org/maven2
3. 远程仓库-私服
私服是架设在局域网内的仓库服务,私服代码广域网上的远程仓库,共局域网内的Maven用户使用。当Maven需要
下载构建的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存早私服上之后,再为
Maven的下载请求提供服务。
私服的优点:
(1) 节省自己的外网带宽
(2) 加速Maven构建
(3) 部署第三方构件
(4) 提高稳定性,增强控制
(5) 降低中央仓库的负荷。
4. 远程仓库的配置
(1) 远程仓库的配置
<project>
...
<repositories>
<repository>
<id>jboss</id> <!--仓库的Id,需与中央仓库的Id:central区分-->
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2</url>
<release>
<enabled>true</enabled>
</release>
<sanpshots>
<enabled>true</enabled>
<!--配置Maven从远程仓库检查更新的频率,默认是daily即每天检查一次,其他可选值为:
never,always,interval: X(每个X分钟检查一次更新)-->
<updatePolicy>daily</updatePolicy>
<!--配置Maven检验文件的策略:ignore:忽略校验错误,fail:Maven在构建时会给出警告
信息,默认为warn.-->
<checksumPolicy>ignore</checksumPolicy>
</sanpshots>
</repository>
</repositories>
...
</project>
(2) 远程仓库的认证
在settingz.xml中配置仓库认证信息:
<settings>
...
<servers>
<server>
<id>jboss</id> <!--该Id需要与需要认证的仓库Id一致-->
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
...
</settings>
(3) 部署至远程仓库
在远程仓库中配置构件部署地址:
<project>
...
<distributionManagment>
<repository>
<id>proj-release</id>
<name>Project Release Repository</name>
<url>http://192.168.1.100/content/repositories/proj-releases</url>
</repository>
<snapshotRepository>
<id>proj-snapshots</id>
<name>Proj Snapshot Repository</name>
<url>http://192.168.1.100/content/repositories/proj-snapshots</url>
</snapshotRepository>
</distributionManagment>
...
</project>
5. 快照版本
强制Maven检查更新:mvn clean install -U
6. 从仓库解析依赖的机制
当本地仓库没有依赖构件的时候,Maven会自动从远程仓库下载;当依赖版本为快照版本的时候,Maven会
自动找到最新的快照。这背后的依赖解析机制为:
(1) 当依赖的范围是system时,Maven直接从本地文件系统解析构件;
(2) 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功;
(3) 在本地仓库不存在相应构件的情况下,如果依赖的版本是显示的发布版本构件,如1.2,,21-beta-1,则
遍历所有的远程仓库,发现后语,下载解析使用;
(4) 如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取所有远程仓库的元数据groupId/artifactId
/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST真实的值,然
后基于这个真实的值检查本地和远程仓库,如步骤(2)(3);
(5) 如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version
/maven-metadata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本
地仓库,或者从远程仓库下载;
(6) 如果最后解析得到的构建版本是时间戳格式的快照,如:1.4.1-20091104.121450-121,则复制其时间
戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。
7. 镜像
(1) 配置中央仓库镜像
<settings>
...
<mirrors>
<mirror>
<id>maven.net.cn</id>
<name>one of the central mirror in chaina</name>
<url>http://maven.net.cn/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
...
</settings>
说明:mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。
(2) 配置使用私服作为镜像
<settings>
...
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Repository Manager</name>
<url>http://192.168.1.100/maven2</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
...
</settings>
说明:mirrorOf的值为*,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http:
//192.168.1.100/mavnen2.