maven仍连中央仓库的根本原因是默认只读用户级settings.xml(${user.home}/.m2/settings.xml),项目根目录或$m2_home/conf/settings.xml仅在用户级文件不存在时才生效;阿里云镜像需正确配置在下,不能为central,推荐设为central,url必须用新地址https://maven.aliyun.com/repository/public。

为什么 settings.xml 改了但 Maven 还是连中央仓库?
常见现象是改完 settings.xml 里的 <mirror></mirror>,执行 mvn clean compile 却发现日志里还在下载 https://repo.maven.apache.org/...。根本原因:Maven 默认只读用户级 settings.xml(${user.home}/.m2/settings.xml),不读项目根目录或 $M2_HOME/conf/settings.xml —— 后者仅当用户级文件不存在时才 fallback 使用。
- 确认生效的是哪个文件:加
-X参数运行mvn -X clean,搜Reading global settings from和Reading user settings from -
阿里云镜像必须写在
<mirrors></mirrors>下,且<id></id>不能为central(会冲突),推荐用aliyunmaven - 务必把
<mirrorof>*</mirrorof>改成<mirrorof>central</mirrorof>或<mirrorof>*,!jboss-public-repository-group</mirrorof>,否则某些插件仓库(如 JBoss)可能被错误代理
阿里云镜像源地址写错导致 404 或重定向失败
阿里云 Maven 仓库在 2023 年底已停用 http://maven.aliyun.com/nexus/content/groups/public/,新地址是 https://maven.aliyun.com/repository/public。旧地址会 302 跳转,而部分 Maven 版本(尤其 3.6.x)对跳转处理不稳定,表现为依赖下载卡住、Connection reset 或 Could not transfer artifact。
- 正确配置片段:
<mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>Aliyun Maven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
- 如果公司内网有自建 Nexus/Artifactory,
<url></url>应填内部地址(如https://nexus.example.com/repository/maven-public/),不要套用阿里云地址 - Maven 3.9+ 默认启用 HTTPS 强制校验,若用自签名证书的私有仓库,需额外配
javax.net.ssl.trustStore,否则报PKIX path building failed
多模块项目里子模块不走镜像?
不是子模块的问题,而是 settings.xml 本身没被继承 —— Maven 所有模块都共用同一个 settings.xml,只要路径对、格式合法,就会统一生效。真正踩坑点在于:IDE(IntelliJ/Eclipse)自带的 Maven 嵌入式实例默认不读你手动改的 settings.xml,而是用 IDE 自带的副本或缓存配置。
- IntelliJ:File → Settings → Build → Build Tools → Maven → User settings file,必须手动指定到你的
~/.m2/settings.xml - Eclipse:Window → Preferences → Maven → User Settings,同样要点 “Update Settings”
- 命令行验证是否生效:运行
mvn help:effective-settings,检查输出中<mirrors></mirrors>是否包含你配的aliyunmaven
镜像配置后依赖下载变慢甚至超时?
阿里云镜像本身延迟低,但问题常出在 DNS 解析或本地网络策略。比如某些企业防火墙会拦截 maven.aliyun.com 的 SNI 请求,或本地 hosts 文件误绑了错误 IP;也有极少数情况是阿里云 CDN 节点临时异常。
- 先测连通性:
curl -I https://maven.aliyun.com/repository/public,看是否返回200 OK,而非502或超时 - 对比原始中央仓库:
curl -I https://repo.maven.apache.org/maven2/,如果两者都慢,说明是本地网络问题 - 临时绕过镜像测试:加
-Dmaven.repo.remote=https://repo.maven.apache.org/maven2/参数,确认是否镜像本身导致 - 注意:阿里云镜像不代理 snapshot 仓库,若项目依赖了
-SNAPSHOT版本,需单独配<mirrorof>*,!snapshots</mirrorof>并确保<repositories></repositories>中 snapshot 仓库 URL 正确
最易被忽略的是镜像 <mirrorof></mirrorof> 的匹配逻辑 —— 它不是模糊匹配,而是按 Maven 内部规则解析,* 会覆盖所有仓库(包括 pluginRepositories),但 central 只匹配 id 为 central 的仓库。很多私有项目把仓库 id 改成 my-company-repo,结果镜像完全不生效。










