maven仓库分为本地仓库和远程仓库。远程仓库有中央仓库、私服、其他公共库。
本地仓库
默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。用户也可自定义本地仓库目录地址,编辑文件./m2/settings.xml,设置localRepository元素的值为想要的仓库地址。但需要注意,默认情况下,./m2/settings.xml文件是不存在的,需要到安装目录复制./conf/settings.xml文件再进行编辑。
中央仓库
原始的本地仓库是空的,maven必须知道至少一个可用的远程仓库,才能下载到需要的构件。中央仓库就是这样一个默认的远程仓库。maven的安装文件自带了中央仓库的配置。打开./lib/maven-model-builder-3.x..jar,访问路径org/apache/maven/model/pom-4.0.0.xml,可以看到如下的配置:
central
Central Repository
https://repo.maven.apache.org/maven2
default
false
此文件是所有maven项目都会继承的超级pom。
私服
即使在一台直接连入internet的个人机器上使用maven,也应该在本地建立私服。因为私服可以帮助你:
- 节省外网宽度
- 加速maven构建。maven的一些内部机制(如快照更新检查)要求maven在执行构建的时候不停的检查远程仓库数据。
- 部署第三方构件。
- 提高稳定性,增强控制。但internet不稳定时,maven就无法顺利构建。
远程仓库的配置
当默认的中央仓库无法满足需求时,可能需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库。这时,可以在pom中配置该仓库。
jboss
JBoss Repository
https://repository.jboss.com/maven2
default
true
false
对于releases和snapshots来说,处理enabled,还有两个子元素updatePolicy和checksumPolicy。
false
daily
ignore
远程仓库的认证
出于安全考虑,我们需要提供认证信息才能访问一些远程仓库,这时就需要配置认证信息。认证信息必须配置在settings.xml文件中,因为pom会被提交到代码仓库供所有成员访问,而settings.xml一般只放在本机。更为安全。
my-repository
username
password
部署到远程仓库
project-releases
project releases repository
http://192.168.40.240:8888/repository/maven-releases/
default
project-snapshots
project snapshots repository
http://192.168.40.240:8888/repository/maven-snapshots/
legacy
运行命令mvn deploy,maven就会项目构件输出到配置的远程仓库,如果项目当前的版本是快照版本,这部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。
快照版本
将项目构件发布到私服时,maven会自动为构件打上时间戳。比如模块A的版本为2.1-SNAPSHOT,发布后2.1-20191212.221414-13就表示2019-12-12 22:14:14的第13次快照。当构建依赖于A的模板B时,maven会自动从仓库中检查A的2.1-SNAPSHOT的最新构件,发现有更新时便进行下载。用户可以使用命令行-U参数强制让maven检查更新,如mvn install-U。
镜像
编辑settings.xml。
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
关于镜像的另一个常见用法是结合私服。私服可以代理任何外部的公共仓库。可以将配置集中到私服,从而简化maven本身的配置。这种情况下,可以将mirrorof配置为*,
* :匹配所有的远程仓库external:* :匹配所有不在本机上的远程仓库repo1,repo2 :匹配仓库repo1和repo2。*,!repo1 :匹配所有远程仓库,rpo1除外。