一、仓库分类
仓库分为本地仓库和远程仓库。当Maven查找构件时,会先从本地仓库查找,不存在就去远程仓库查找,发现需要的构件将其下载到本地仓库。如果本地仓库和远程仓库都木有,则报错。
1、本地仓库默认在C盘计算机名的文件夹.m2中(.开头的文件夹无法直接取名创建,可在命令行命令创建)。用户可自定义本地仓库目录,推荐做法为先复制一份maven安装目录conf文件夹中的setting.xml到.m2目录下,然后设置localRepository为目标目录,如:
<localRepository>F:/maven/repository</localRepository>
2、maven会有默认的远程仓库(中央仓库),配置在所有pom都继承的超级pom中,此pom位于 $M2_HOME/lib/maven-model-builder-3.0.jar org/apache/maven/model/pom-4.0.0.xml中,打开pom可以看到:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
id进行唯一标识,snapshots标签的值false表示不下载快照版本的构件。
3、私服,其作为特殊的远程仓库,架设在局域网内的仓库服务(Nexus)。
二、远程仓库的配置
1、远程仓库pom中配置如下:
<repositories>
<repostory>
<id>CN</id>
<name>OSChinaCentral</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumpolicy>ignore</checksumpolicy>
</releases>
</repostory>
</repositories>
snapshot和releases分别对应快照版本和已发布版本,enabled标识值标明是否下载该版本。
其中updatePolicy、checksumpolicy等都是可选值:
updatePolicy表示配置从远程仓库检查更新的频率,默认值为daily,表示每天检查一次,可用值包括:never--从不检查更新,always--每次构建都检查更新,interval:X--每隔x分钟检查一次更新(x为任意整数);checksumpolicy表示用来配置maven检查校验和文件的策略,当构件被部署到仓库中时,会同时部署对应的校验和文件,在下载构件时,maven会验证校验和文件,如果校验和验证失败,如果此时checksumpolicy值为默认的warn时,maven则会在执行构建时输出警告信息,其可用值包括:fail--maven遇到校验和错误就让构建失败,ignore--使maven完全忽略校验和错误。
2、部署至远程仓库
构件部署至仓库中,可用来供其他团队成员使用。Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构件部署(deploy)到仓库中,在pom.xml中,配置distributionManagement元素。如:
<distributionManagement>
<repository>
<id>pro-releases</id>
<name>Release Repository</name>
<url>http://192.168.1.100/content/repositories/proj-releases</url>
</repository>
<snapshotRepository>
<id>pro-snapshot</id>
<name>Snapshot Repository</name>
<url>http://192.168.1.100/content/repositories/proj-snapshot</url>
</snapshotRepository>
</distributionManagement>
三、镜像
仓库镜像在setting.xml中配置,如果仓库A可以提供仓库B所有的内容,那么仓库A就是仓库B的镜像。
<mirrors>
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
如上配置了一个中央仓库的镜像,mirrorOf中值为central,此值为超级pom中默认中央仓库的id,此时任何对于中央仓库的请求都会转到id为CN的仓库中。