Maven的settings.xml文件中的mirror配置用于设置镜像仓库,而mirrorOf属性则定义了该镜像会拦截哪些远程仓库的请求,理解它的规则是正确配置Maven镜像的关键。

mirrorOf的基本作用
当Maven需要下载依赖时,会先检查是否有匹配的镜像配置,如果镜像的mirrorOf匹配当前请求的仓库ID,就会将请求转发到镜像仓库的地址,而不是直接访问原始仓库。这样可以实现统一依赖源、加速下载等需求。
mirrorOf的常用配置值及规则
mirrorOf的值可以是单个仓库ID、多个仓库ID的组合,也可以使用通配符,常见的配置规则如下:
- 单个仓库ID:直接填写仓库的ID,比如
central,表示只拦截中央仓库的请求。 - 多个仓库ID:使用逗号分隔多个仓库ID,比如
central,aliyun-repo,表示拦截这两个仓库的请求。 - 通配符*:匹配所有仓库ID,所有依赖请求都会被该镜像拦截。
- 排除特定仓库:使用感叹号开头表示排除,比如
*,!local-repo,表示匹配所有仓库,但不拦截ID为local-repo的仓库。 - 外部仓库匹配:使用
external:*表示匹配所有不在本地的仓库,即排除本地仓库和文件协议的仓库。
配置示例
以下是一个常见的阿里云Maven镜像配置示例,mirrorOf设置为*,表示所有仓库请求都走阿里云镜像:
<mirror> <id>aliyun-maven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共Maven镜像</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
如果需要排除本地私有仓库,避免私有依赖被转发到公共镜像,可以这样配置:
<mirror> <id>public-mirror</id> <mirrorOf>*,!private-repo</mirrorOf> <name>公共镜像</name> <url>https://ipipp.com/maven/public</url> </mirror>
注意事项
- 多个镜像配置时,Maven会按照settings.xml中镜像的声明顺序匹配,第一个匹配的镜像会生效,后面的同规则镜像不会被执行。
- 如果mirrorOf配置为*,会拦截所有仓库请求,包括本地搭建的私有仓库,因此需要确认是否需要排除私有仓库ID。
- 仓库ID是匹配的核心,远程仓库的ID在pom.xml或者settings.xml的profile中定义,需要和mirrorOf的值完全一致才能匹配。
规则验证方法
如果需要确认mirrorOf规则是否生效,可以在Maven命令后添加-X参数开启调试日志,查看依赖下载时的仓库匹配信息:
mvn clean package -X
在输出的日志中搜索mirror相关的信息,就可以看到当前请求被哪个镜像拦截,从而验证配置是否符合预期。
MavenmirrorOfsettings.xml镜像仓库修改时间:2026-06-18 09:21:23