仓库类型

-
本地仓库:位置默认在
{user}/.m2目录下 -
maven官方中央仓库:是maven远程仓库的默认值,是主流框架、工具包等jar包的官方发布渠道,地址为 repo.maven.apache.org/maven2
-
其他maven仓库:比如华为maven仓库、某公司局域网内部maven仓库。这些maven仓库一般都是每隔一段时间就会与maven官方中央仓库同步,除此之外还可能包含maven官方中央仓库中下载不到的一些包。
依赖下载过程

- 下载依赖时,首先检查本地仓库,如果本地仓库中没有,就去远程仓库下载并缓存到本地仓库中。
配置远程仓库或镜像
以下情况可能需要我们配置自定义的远程仓库或镜像
- 默认的 maven官方中央仓库 下载速度慢
- 有些依赖项 maven官方中央仓库 中没有
maven 提供了1种配置镜像的方法和3种配置远程仓库的方法
-
镜像:通过
{user}/.m2/settings.xml中的settings.mirrors.mirror配置 -
全局profile仓库:通过
{user}/.m2/settings.xml中的settings.profiles.profile.repositories.repository配置 -
项目仓库:通过
pom.xml中的project.repositories.repository配置远程仓库 -
项目profile仓库:通过
pom.xml中的project.profiles.profile.repositories.repository配置远程仓库
配置镜像
作用范围:所有使用该 settings.xml 文件的maven项目
步骤:打开{user}/.m2/settings.xml,在settings.mirrors中添加类似如下配置
<mirror>
<id>mirror</id>
<mirrorOf>central</mirrorOf>
<name>maven镜像</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
注意 <mirrorOf>central</mirrorOf> 这行xml,它表示 所有对 id 叫 central 的 maven 仓库的请求,全部转发到https://mirrors.huaweicloud.com/repository/maven/中
这个 id 叫 central 的 maven 仓库是哪来的呢?
除了 central 这个默认仓库的id之外,mirrorOf 还可以填写来自以下三个地方的id
-
通过
{user}/.m2/settings.xml中的settings.profiles.profile.repositories.repository配置的远程仓库的id -
通过
pom.xml中的project.repositories.repository配置的远程仓库的id -
通过
pom.xml中的project.profiles.profile.repositories.repository配置的远程仓库的id
配置多镜像
应用场景:需要对不同仓库的请求转发到不同的镜像仓库中
如下:一个转发到了huaweicloud 一个转发到了 163
<mirrors>
<mirror>
<id>mirror1</id>
<mirrorOf>repo1</mirrorOf>
<name>maven镜像1</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
<mirror>
<id>mirror2</id>
<mirrorOf>repo2</mirrorOf>
<name>maven镜像2</name>
<url>http://uni.mirrors.163.com/</url>
</mirror>
<mirrors>
mirror
在 maven 中 mirror(镜像)和 repository(仓库)是不同的概念
mirror的作用:将 对A仓库的请求转发到B仓库
-
没有配置 mirror时

-
配置了 mirror
此时,B 仓库被称为A 仓库的镜像。
从上面可以看出 mirror 也是一个仓库,但它是一个特别的仓库,它具有拦截其他仓库请求并转发到自己仓库的功能
mirror的mirrorOf值,还提供了多种写法
<mirrorOf>central</mirrorOf>:转发对central仓库的请求<mirrorOf>repo1,repo2</mirrorOf>:转发对repo1,repo2仓库的请求<mirrorOf>*</mirrorOf>:转发对所有仓库的请求<mirrorOf>*,!repo1</mirrorOf>:转发对所有仓库的请求,除了repo1以外
注意!镜像仓库会完全屏蔽掉 被镜像仓库,即镜像仓库失效后,maven也不会再去访问被屏蔽掉的仓库。
参考
配置项目仓库
作用范围:该pom文件所在的项目
步骤:打开pom.xml文件,在根节点下,加入下列配置
<repositories>
<repository>
<name>华为maven仓库</name>
<id>huawei</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<name>华为maven插件仓库</name>
<id>huaweiPlugin</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</pluginRepository>
</pluginRepositories>
注意 repositories.repository.id 这个节点,它表示的是该仓库的唯一标识。 所谓的唯一标识,指的是,在一个项目的所有pom文件(多模块的项目会有多个pom文件)和该项目对应的settings.xml文件中,有且仅有一个使用了该id的远程仓库
<pluginRepositories> 是插件仓库,有时候依赖下载的很快,但是插件下载的很慢,就可以配置插件仓库
全局profile仓库 和 项目profile仓库
这两个的作用范围都是当前环境。
关于 maven profile,可以参考这篇文章spring profile 与 maven profile 多环境管理
一般情况下,开发环境、测试环境、正式环境 用的都是一套maven仓库,如果你有不同环境对应不同仓库的需求,那就在 profile 中加 repositories吧,全局profile仓库 和 项目profile仓库配置方法都一样。如下所示
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
...
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<name>华为maven仓库</name>
<id>huawei</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
</repositories>
</profile>
<profile>
<id>test</id>
<repositories>
<repository>
<name>163 maven仓库</name>
<id>163.com</id>
<url>http://uni.mirrors.163.com/</url>
</repository>
</repositories>
</profile>
</profiles>
...
</settings>