首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Maven札记5-Maven仓库

2012-07-26 
Maven笔记5-Maven仓库??? Maven仓库布局方式:groupId/artifactId/version/artifactId-version.packaging??

Maven笔记5-Maven仓库

??? 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.

热点排行