当用户需要自定义仓库目录的时候,可以编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。例如:
需要注意的是,默认情况下,~/.m2/settings.xml文件是不存在的,用户需要从Maven安装目录$M2_HOME$/conf/settings.xml复制此文件再进行编辑。
2.远程仓库的配置
很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要额构建存在于另外一个远程仓库中,如JBoss Maven仓库。这时,可以在POM中配置该仓库,如下:
声明了一个id为jboss的仓库。需要注意的是,Maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。
该配置中的releases和snapshots元素比较重要,它们用来控制Maven对于发布构件和快照版构建的下载。这里需要注意的是enabled子元素,该例子中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。
远程仓库的认证
大部分远程仓库都不需要认证,但有时候出于安全的考虑,比如公司内部构建了一个私服,就需要配置认证信息,配置认证信息与配置仓库信息不同,仓库信息可以在pom.xml文件中,认证信息必须在settings.xml文件中。
这里的关键是id元素,settings.xml中server元素的id必须和pom中需要认证的repository元素的id完全一致。换句话说,正是这个认证信息与仓库配置联系在了一起。
私服的一大作用是部署第三方构件,包括组织内部生成的构件以及一些无法从外部仓库直接获取的构件。无论日常开发中生成的构件,还是正式版本的构件,都需要部署到仓库中,供其他团队成员使用。
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本构件的仓库,后者表示快照版本的仓库。
配置正确后,在命令行运行mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库。
如果当前项目的版本是发布版本就部署到发布版本的仓库,如果是快照版本就部署到快照版本的仓库。
快照版本
maven为什么要区分发布版本与快照版本呢?简单的1.0,1.1不就够了么,在此我们就可以提到SNAPSHOT到一个SNAPSHOT(快照版本)。
我们只要将版本的版本号设置为2.1-SNAPSHOT,然后发布到私服中,在发布的过程中,maven会自动为版本打上时间戳。比如2.1-20091214.221414-13就表示2009年12月14日22点14分14秒的第13次快照。有了该时间戳,Maven就能随时找到仓库中该构件2.1-SNAPSHOT版本最新的文件。这时,如果配置对于2.1-SNAPSHOT版本的依赖,当她构建模块B的时候,Maven会自动检测模块A的2.1-SNAPSHOT的最新构件,当发现有更新时便立即下载。
当项目经过完善的测试后需要发布后,就应该将快照版本改为发布版本。
镜像
该例中,<mirrorOf>的值为central,表示该配置为中央仓库d的镜像,任何对中央仓库的请求都会转至该镜像。
该例中<mirrorOf>的值为*,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会转至http://192.168.1.100/maven2/。如果该镜像需要认证,则配置一个id为internal-repository的<server>即可。