mirrorof 设为 会全量拦截所有仓库请求,导致私有仓库无法访问;应优先使用 external:,并确保镜像url结尾无斜杠、位于直接子节点且顺序正确。

mirrorOf 配置写成 * 会覆盖所有仓库,包括私有仓库
很多人把 mirrorOf 设成 *,以为只是“加速中央仓库”,结果发现公司私有 repository 里的 SNAPSHOT 包拉不下来,甚至构建直接失败。Maven 的镜像机制是「全量拦截」:一旦匹配上,所有请求都会被重定向到该 mirror,不管原始仓库 ID 是什么。
实操建议:
- 优先用
external:*—— 它只代理外部网络请求(即非localhost、非file://的仓库),保留私有仓库直连 - 若必须用
*,确保你的镜像服务器(如 Nexus/阿里云)已同步了私有仓库的元数据,否则mvn deploy到私有库后,其他机器仍可能解析不到新版本 - 检查
settings.xml中是否有多条<mirror></mirror>;Maven 只取第一个匹配项,后面的会被忽略
mirror url 指向 Nexus 或阿里云时,路径结尾不能带 /repository/maven-public/ 这类子路径
常见错误是复制 Nexus 仓库页面 URL 直接粘贴进 <url></url>,比如填成 https://nexus.example.com/repository/maven-public/。这会导致 Maven 在后面自动拼上 /maven-metadata.xml 等路径,最终请求变成 .../maven-public//maven-metadata.xml(双斜杠),Nexus 返回 400 或 404。
正确做法:
- Nexus 用户应使用代理仓库的「Repository URL」,不是「Browse URL」;通常形如
https://nexus.example.com/repository/maven-public(结尾无斜杠) - 阿里云 Maven 镜像固定为
https://maven.aliyun.com/repository/public,注意是/repository/public,不是/nexus/content/groups/public - 用
curl -I https://your-mirror-url/maven-metadata.xml快速验证是否返回 200
多个 mirror 同时存在时,mirrorOf 的通配逻辑容易误判
比如你写了两条:mirrorOf=central 和 mirrorOf=*,!my-private-repo,本意是“除私有库外都走镜像”,但 Maven 实际只认第一个完全匹配的 mirrorOf 值,不会合并或叠加规则。如果项目 pom 中声明了 <repository><id>central</id></repository>,那它就只命中第一条,第二条根本不会触发。
关键点:
-
mirrorOf不支持多值“或”逻辑,写成central,public表示「同时匹配 central 和 public」,而非「匹配其中之一」 - 排除语法
!xxx必须和通配符一起用,单独写!my-private-repo无效 - 最稳妥的方式是统一用
external:*,再在项目 pom 中显式声明私有仓库,并设<releases><enabled>true</enabled></releases>
settings.xml 里 <mirrors></mirrors> 节点位置错了,配置根本不生效
典型症状:改完 settings.xml,mvn help:effective-settings 里看不到 mirrors,或者 mvn dependency:resolve 时仍走原始中央仓库。问题往往出在 XML 结构上 —— <mirrors></mirrors> 必须是 <settings></settings> 的**直接子节点**,且顺序必须在 <profiles></profiles> 之前(Maven 3.8+ 对顺序更敏感)。
检查步骤:
- 运行
mvn help:effective-settings -Dverbose,确认输出中包含<mirrors></mirrors>块 - 确保没有把
<mirrors></mirrors>错放在<profile></profile>内部 —— profile 里的<repositories></repositories>才作用于该 profile,<mirrors></mirrors>不支持嵌套 - Windows 下注意文件编码是 UTF-8 无 BOM,BOM 会导致解析失败,
mirrors消失
<servers></servers> 里的凭据 —— 那些只对原始仓库地址生效。










