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.