本文详细介绍maven常用知识:仓库。接上一篇,maven常用知识详解1:坐标和依赖
Maven仓库
仓库分类
仓库分为两类:本地仓库、远程仓库(私服也是一种特殊的远程仓库)。
Maven根据坐标寻找构建时,首先查看本地仓库,本地有则直接使用;如果没有会去远程仓库查找,找到后下载本地使用。如果本地和远程都没有,则会报错。
1.本地仓库
编辑文件~/.m2/settings.xml(默认情况该文件不存在,需从安装目录$M2_HOME/conf/settings.xml复制编辑,推荐使用修改此用户配置,不建议修改全局目录),设置localRepository元素
java
<localRepository>
D: \repository\maven
</localRepository>
构件只有在本地仓储存在才可以供Maven项目使用,常见构件存入本地仓库的方法:
a.依赖Maven从远程仓库下载
b.将本地项目安装到Maven仓库
c.将本地项目构建安装进Maven仓库。在项目中执行mvn clean install,当出现BUILD SUCCESSFUL即构建成功。
2.远程仓库
a.中央仓库(Maven核心自带的特殊远程仓库,默认配置下本地仓库没有则尝试从中央仓库下载)
b.私服(特殊的远程仓库)
架设在局域网内部的仓库服务器,代理广域网上的远程仓库,供局域网内的Maven用户使用。
使用私服的好处:
- 节省自己的外网宽带和时间
- 加速Maven构建
- 部署第三方构建
- 提高稳定性,增强控制
- 降低中央仓库的负荷
常见私服Sonatype Nexus搭建,参考:
https://www.cnblogs.com/bingyeh/p/5913486.html
c.其它公共库
常见的远程仓库:
Java.net Maven库:http://download.java.net/maven/2/
Jboss Maven库:http://repository.jboss.com/maven2/
远程仓库的pom配置
当默认的中央仓库无法满足项目需求时,可在pom文件中配置另外的远程仓库:
java
<project>
......
<repositories>
<repository>
<id>cloudhopper</id>
<name>Repository for Cloudhopper</name>
<url>
http://maven.cloudhopper.com/repos/third-party/
</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default<layout>
</repository>
</repositories>
</ project >
在repositories元素下可以使用repository子元素声明一个或多个远程仓库。 releases用来控制maven对于发布版构件的下载,enabled 属性值为true表示开启本仓库发布版本下载;snapshots用来控制maven对于快照版构件下载,enabled属性值为false表示关闭快照版本下载.
layout元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1布局。
*对于元素releases和snapshots来说,除了enabled外还包括另外两个子元素updatePolicy和checksumPolicy:
updatePolicy:用来配置Maven从远程仓库检查更新的频率,默认是daily,表示Maven每天检查一次。其他值,never-从不检查更新;always-每天构建都检查更新;interval:x-每隔x分钟检查更新一次(x为任意整数)。
checksumPolicy:用来检查检验和文件的策略。当构件被部署到Maven仓库时,会同时部署对应的校验和文件。下载构件时,Maven会验证校验和文件。如果校验和验证失败,当checksumPolicy的值为默认warn时,Maven会在构建时输出警告信息;为fail时,就让构建失败;为ignore时,使Maven完全忽略校验和错误。
远程仓库的认证
对于需要提供认证信息才可以访问的远程仓库,应当在settings.xml文件中添加认证信息:
java
<settings>
......
<servers>
<server>
<id>my-proj</id>
<username>username</username>
<password>pwd</password>
</server>
</servers>
</settings>
这里的关键元素是id,setting.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致。
部署构件至远程仓库
java
<project>
......
<distributionManagement>
<repository>
<id>proj-releases</id>
<name>proj release repository </name>
<url>
http://192.168.0.1/content/ proj-releases
</url>
</repository>
<snapshotRepository >
<id>proj-snapshots</id>
<name>proj snapshots repository</name>
<url>
http://192.168.0.1/content/ proj- snapshots
</url>
</snapshotRepository >
</distributionManagement >
</project >
注:distributionManagement元素下的两个子元素,repository表示发布版本构件的仓库,snapshotRepository表示快照版本的仓库。
配置正确后,在命令行运行mvn clean deplay,将项目构建输出的构件部署到配置对应的远程仓库。
项目中快照版本的使用,只应该在组织内部的项目或模块间依赖使用,而不应该依赖于任何组织外部的快照版本,因为快照版本的不稳定性,容易造成潜在的危险。因此,当项目经过完善的测试需要发布时,就应该将快照版本更改为发布版本。
镜像
如果仓库X可以提供仓库Y存储的所有内容,则可以认为X是Y的镜像
例:http://uk.maven.org/maven2是中央仓库http://repol.maven.org/maven2在中国的镜像,该镜像可以提供比中央仓库更快的服务。
配置方式(在settings.xml中添加配置):
java
<settings>
......
<mirrors>
<mirror>
<id>UK</id>
<name>UK Central</name>
<url>http://uk.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
mirrorOf的属性值:
central表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。
* 匹配所有远程仓库
external:* 匹配所有不在本机上的远程仓库
repo1,repo2 匹配多个远程仓库,用','分割
*,!repo1 匹配所有除repo1外的远程仓库
注:mirrorOf的属性值是central,表示该仓库是中央仓库的镜像。如果该镜像仓库需要认证,只需要配置一个和id属性值对应的即可。因为镜像仓库完全屏蔽被镜像仓库,当镜像仓库不稳定时,maven将无法下载构件。
☆点击:精彩内容,了解更多。