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.