xyZGHio

本是青灯不归客,却因浊酒恋风尘

0%

Maven(二): 仓库

Maven的依赖是存放在仓库中进行统一管理,使用某依赖时先从本地仓库检索是否有该依赖,如果没有再从远程仓库下载至本地仓库。日常开发中使用最多的就是Maven的中央仓库,本文将会对其介绍并说明如何配置中央仓库的镜像以提高访问速度

abstract.png

中央仓库

Maven工具中配置了一个默认的远程仓库——central中央仓库。在Maven安装目录的lib文件夹下找到 maven-model-builder-3.6.0.jar 文件(注,不同版本的Maven,该文件的版本号可能会有不同),解压该jar包后访问下述路径的pom文件 maven-model-builder-3.6.0/org/apache/maven/model/pom-4.0.0.xml,结果如下所示

figure 1.jpeg

包含这该配置的文件是所有Maven项目均会继承的超级POM。POM文件的repositories元素可以包含若干repository子元素,用于配置多个远程仓库。从POM文件的repository元素可以看出其配置了ID为central的远程仓库。id元素是对一个仓库的唯一声明;name元素是为了方便人阅读说明;url元素为远程仓库地址;snapshots元素是为了是否使能该仓库中快照版本的下载支持,其子元素enabled为fasle,表示不使能;相应地,对于发布版本的下载支持的使能控制,可通过repository元素的子元素releases进行配置

Note :

大多数情况下,Maven自带的中央仓库已经足够我们日常开发使用了,但是有些第三方组件会由于版权等因素无法放入中央仓库中,此时在项目的POM中直接通过repository元素添加所需组件所在的远程仓库即可

远程仓库的认证

一般情况下,远程仓库无需认证即可访问,但是有一些远程仓库出于安全等因素的考虑需要进行认证才可访问。这个时候就需要配置该仓库的认证信息。因为POM文件作为项目文件是需要提交到仓库中的,而Maven的setting.xml文件是存放在本地中,所以在setting.xml中配置仓库的认证信息会更安全。在setting.xml文件下的servers元素的子元素server中添加相关远程仓库的认证信息即可,如下所示。其中id元素即为项目POM文件声明的远程仓库的ID

1
2
3
4
5
6
7
8
9
10
11
12
13
<settings>
...
<servers>
...
<server>
<id>[repositoryId]</id>
<username>[username]</username>
<password>[password]</password>
</server>
...
</servers>
...
</settings>

镜像

如果仓库Y可以提供仓库X存储的所有内容,那么就称Y是仓库X的一个镜像。有时候远程仓库的地理位置离我们很远,这个时候,如果配置距离我们较近的镜像,通过镜像来访问可以大大提高访问速度。在setting.xml文件下的mirrors元素的子元素mirror中添加远程仓库的镜像即可

下述代码是一个为中央仓库配置阿里镜像的实例。id元素表示镜像ID(如果该镜像需要认证信息,同样在setting.xml中配置一个该ID的server元素即可),mirrorOf元素表示被镜像的仓库,name元素是为了方便人阅读说明,url元素为镜像仓库地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<settings>
...
<mirrors>
...
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
...
</mirrors>
...
</settings>

对于mirrorOf元素,其还支持一些高级的配置值:

  • * : 表示匹配所有远程仓库
  • external:* : 表示匹配所有远程仓库,其中使用localhost本机的、基于file://文件协议的除外
  • repo1,repo2,repo3 : 表示匹配指定的多个远程仓库,以逗号分隔
  • *,!repo1 : 表示匹配所有远程仓库,其中repo1除外。感叹号可用于将指定仓库从匹配中排除

Note :

对某一仓库配置镜像后,Maven将会完全屏蔽该仓库。即当某一个远程仓库X的镜像服务Y无法正常访问时,Maven也不会去向仓库X中进行访问,此时即会导致该仓库中的依赖无法被正常下载至本地仓库中以供我们开发用

参考文献

  1. Maven实战 许晓斌著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝