Maven 仓库下载机制本文覆盖Mirror 与 Repository 的职责区别、mirrorOf语法、国内仓库选择、两种典型配置场景。1. 两个角色Maven 下载依赖管线中有两个配置层配置层位置职责MirrorMAVEN_HOME/conf/settings.xml替换仓库 URL改道Repository项目pom.xml追加下载源关键区别Mirror 不支持多源 fallbackRepository 支持。这个区别是第 5、6 节选择配置方案的前提——如果不理解它就会误以为配多个 Mirror 就能互相备用。2.mirrorOf语法mirrorOf的值是仓库 ID不是镜像自己的名字决定该镜像拦截哪些仓库。值效果适用场景central只拦截 Maven 内置仓库日常加速见第 5 节*拦截所有仓库全局代理*,!xxx拦截所有排除xxx精准放行见第 6 节写法 B来源Maven 官方 Settings 文档mirrorOf支持*、external:*、repo1,repo2、*,!repo1四种语法。了解了语法之后接下来看具体有哪些仓库可用。3. 国内仓库一览在决定用哪个仓库之前先了解有哪些可选。仓库地址阿里云https://maven.aliyun.com/repository/public华为云https://mirrors.huaweicloud.com/repository/maven/Maven 官服https://repo1.maven.org/maven2/国内访问速度阿里云与华为云均部署全国 CDN下载速度远快于海外直连官服。两者分属不同云厂商物理隔离一个故障不会影响另一个。腾讯云 Maven 镜像维护频率较低不建议作为主力。推荐顺序阿里云首选→ 华为云备用→ 官服兜底。第 5、6 节将基于这个顺序给出两种场景的配置方案——但在此之前第 4 节先解决一个关键前置问题。4.*和central的本质区别在进入场景之前先搞清楚最容易被忽视的一点以下对比表基于 Maven Mirror 机制推导官方文档描述了mirrorOf的匹配规则但未直接给出此表格。设置pom 无仓库pom 有仓库mirrorOf central正常pom 仓库能正常工作mirrorOf *正常和central没区别pom 仓库被劫持作废不配 pom 仓库时两者行为完全一致。区别只在 pom 加了仓库后才显现。这个区别直接影响第 5、6 节两种场景的写法选择。5. 需求一只要一个源不改 pom。settings 配一个 mirrormirrorOf设为central!-- MAVEN_HOME/conf/settings.xml --mirroridaliyunmaven/idname阿里云公共仓库/nameurlhttps://maven.aliyun.com/repository/public/urlmirrorOfcentral/mirrorOf/mirror效果Maven 内置central仓库被镜像拦截所有请求改道阿里云。pom 无须改动。此时写*效果一样——因为没配 pom 仓库第 4 节的对比表已经说明了这一点。需求一的问题在于一旦阿里云缺少某个依赖如迟迟未同步的新版本构建直接失败。需求二正是为了解决这个问题。6. 需求二一个源不够需要兜底当阿里云未同步某些新版本如sensitive-word 0.25.0需要自动尝试其他源。Mirror 层不支持 fallback——第一个匹配的 Mirror 失败后不会尝试下一个。因此多源 fallback 必须在 Repository 层实现。本节提供两种写法。写法 A推荐Mirror 只加速centralPom 加备用回顾第 4 节对比表mirrorOf central不会劫持 pom 仓库因此可以安全添加。!-- MAVEN_HOME/conf/settings.xml --mirroridaliyunmaven/idname阿里云公共仓库/nameurlhttps://maven.aliyun.com/repository/public/urlmirrorOfcentral/mirrorOf/mirror!-- 项目 pom.xml --repositories!-- ① 首选阿里云已由 settings.xml mirror 加速此处不重复声明 --!-- ② 备用华为云 --repositoryidhuawei/idurlhttps://mirrors.huaweicloud.com/repository/maven//url/repository!-- ③ 兜底Maven 官服 --repositoryidofficial/idurlhttps://repo1.maven.org/maven2//url/repository/repositories流程central走阿里云 → 若 404 → 试huawei→ 若 404 → 试official官服一定有。写法 B严格Mirror 全拦只开一个洞对应第 4 节对比表mirrorOf *,!direct。适合只信任阿里云仅允许一个例外的场景。!-- MAVEN_HOME/conf/settings.xml --mirroridaliyunmaven/idname阿里云公共仓库/nameurlhttps://maven.aliyun.com/repository/public/urlmirrorOf*,!direct/mirrorOf/mirror!-- 项目 pom.xml --repositoriesrepositoryiddirect/id!-- 与 !direct 对上 --urlhttps://repo1.maven.org/maven2//url/repository/repositories流程所有仓库被拦截到阿里云唯独direct放行直连官服。以上两种写法各有适用场景。大多数日常场景用写法 A 即可缺的自动试华为云都没有走官服。新依赖不需要逐个配置仓库。