1本地仓库
只有再本地仓库的构件才能被maven项目使用。
2远程仓库
(1)中央仓库是默认的远程仓库
maven安装文件自带中央仓库的配置。用解压工具打开$M2_HOME/lib/maven-model-builder-3.0.jar,访问路径org/apache/maven/model/pom-4.0.0.xml可以看到:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout><!-- 仓库布局 -->
<snapshots>
<enabled>false</enabled><!-- 不下载snapshot版本的构件 -->
</snapshots>
</repository>
</repositories>
这个pom是所有maven项目都会继承的超级pom
(2)其他公共库
常见的有:Java.net Maven库 http://download.java.net/maven/2/
JBoss Maven库 http://repository.jboss.com/maven2/
有时默认中央仓库无法满足项目需求,需要配置另外一个远程仓库,在项目pom中增加
<repositories>
<repository>
<id>jboss</id>
<name>Jboss Repository</name>
<url>http://repository.jboss.com/maven2</url><!-- 仓库地址 -->
<releases><!-- 发布版本 -->
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy><!-- 从远程仓库检查更新的频率 -->
<checksumPolicy>ignore</checksumPolicy><!-- 检查检验和文件的策略,在下载构件时会验证校验和文件,warn(默认)——执行构件时输出警告信息,fail——遇到校验和错误
就让构件失败,ignore——完全忽略校验和错误 -->
</releases>
<snapshots><!-- 快照版本 -->
<enabled>false</enabled><!-- 不下载snapshot版本的构件 -->
</snapshots>
<layout>default</layout><!-- 仓库布局 -->
</repository>
</repositories>
注意:仓库声明的id必须唯一,maven自带的中央仓库id为central如果其他仓库也声明该id,就会覆盖中央仓库的配置。
3私服
特殊的远程仓库,为节省带宽和时间,局域网架设的私有仓库服务器,用其代理所有外部的远程仓库。还能部署内部项目(mvn clean install)供其他项目使用。
4配置远程仓库的认证
使访问远程仓库(下载构件,部署构件等)需要提供认证信息。
认证信息必须配置在setting.xml中,为一个id为my-proj的仓库配置认证信息,setting.xml有如下配置:
<servers>
<server>
<id>my-proj</id><!-- 必须与要认证的repository id一致 -->
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
5部署至远程仓库
项目的pom.xml
<distributionManagement>
<repository><!-- 发布版本构件仓库 -->
<id>proj-releases</id>
<name>Proj Release Repository</name>
<url>..</url>
</repository>
<snapshotRepository><!-- 快照版本构件仓库 -->
<id>proj-snapshots</id>
<name>Proj Snapshot Repository</name>
<url>..</url>
</snapshotRepository>
</distributionManagement>
配置正确后,运行命令 mvn clean deploy,maven将项目构件部署到远程仓库,快照版本部署到快照版本远程仓库,发布版本部署到发布版本远程仓库。
6从仓库解析依赖的机制
依赖的版本不是显示的发布版本构件,如:1.2,2.1-beta-1等,而是RELEASE或LATEST,SNAPSHOT,会从远程仓库读取元数据groupId/artifactId/maven-metadata.xml,再将元数据与本地元数据合并,计算出真实版本值,然后基于这个真实值检查和解析本地和远程仓库。
注意:仓库元数据不是永远正确的,有时发现无法解析某些构件或解析得到错误构件,有可能是元数据出错,需要手工或使用工具(如Nexus)对其进行修复。
7镜像
如果仓库X可以提供仓库Y存储的所有内容,X就是Y的一个镜像。如:http://maven.net.cn/content/groups/public/是中央仓库再中国的镜像,由于地理位置的因素,该镜像往往能够比中央仓库提供更快的服务。
配置镜像,在setting.xml文件中
<mirrors>
<mirror>
<id>maven.net.cn</id>
<name>中央仓库镜像</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf><!-- 表示中央仓库的镜像,任何对中央仓库的请求都会转至该镜像 -->
</mirror>
</mirrors>
私服代理外部仓库时,配置私服
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Repository Manager</name>
<url>..</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
注:mirrorOf
<mirrorOf>external:*</mirrorOf> <!-- 匹配所有不在本机上的远程仓库,使用localhost和file://协议的除外, -->
<mirrorOf>repo1,repo2</mirrorOf><!-- 匹配仓库repo1,repo2,使用逗号分隔多个远程仓库 -->
<mirrorOf>*,! repo1</mirrorOf><!-- 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配排除 -->