idea未读取修改后的~/.m2/settings.xml,因其默认使用内置maven(plugins/maven/lib/maven3),仅认自身conf/settings.xml;需在file→settings→build tools→maven中将maven home path设为本地安装路径,并显式指定user settings file指向~/.m2/settings.xml,同时镜像mirrorof应设为central而非*以避免认证失败,最后清理缓存并执行mvn -u强制更新。

IDEA 用的不是你改的 settings.xml
改完 ~/.m2/settings.xml 没生效,八成是 IDEA 根本没读它。IDEA 默认使用自带的 Maven(路径类似 plugins/maven/lib/maven3),它只认自己目录下的 conf/settings.xml,不会自动加载用户级配置。
必须手动指定:
- 打开 File → Settings → Build Tools → Maven
- 把
Maven home path改成「Use specified installation」,指向你本地安装的 Maven(如/opt/homebrew/Cellar/maven/3.9.6或C:\Program Files\apache-maven-3.9.6) - 同时确保
User settings file明确指向你编辑过的~/.m2/settings.xml - 别勾选「Override settings from pom.xml」——这会让 IDEA 忽略你的镜像配置
<mirrorof></mirrorof> 写 central 还是 *?
写 <mirrorof>central</mirrorof> 更稳妥。虽然 * 看起来“全包”,但某些插件(比如老版本的 maven-deploy-plugin 或企业私有仓库代理)会因匹配太宽而跳过认证、报 401 或静默失败。
正确示例(贴进 <mirrors></mirrors> 块内):
<mirror><id>aliyunmaven</id><mirrorof>central</mirrorof><name>Aliyun Maven</name><url>https://maven.aliyun.com/repository/public</url></mirror>
如果项目还用了公司私有仓库且它的 <id></id> 也是 central,就得改成:<mirrorof>!my-private-repo,central</mirrorof>,排除冲突源。
改完不拉新依赖?缓存和元数据得清
IDEA 不会因为你改了镜像就自动重下所有依赖——它会复用本地已有的 .lastUpdated 文件和 maven-metadata-central.xml 缓存,导致日志里还显示从 repo1.maven.org 下载。
清理这几处才真正触发重拉:
- 删掉项目根目录下的
target/和.idea/libraries/ - 删掉
~/.m2/repository/.cache/maven-metadata-central.xml(注意是.cache目录下,不是仓库子目录里) - 在 IDEA 终端执行
mvn -U clean compile(-U强制更新快照和元数据) - 观察日志:如果出现
Downloading from aliyunmaven: https://maven.aliyun.com/...,才算真正生效
pom.xml 里加 <repositories></repositories> 是临时补救,不是正解
在 pom.xml 里硬编码仓库地址,只对当前项目起作用,且容易和 settings.xml 镜像逻辑打架(比如 mirrorOf=central 时,pom.xml 的 <repository></repository> 可能被直接忽略)。
仅建议用于以下场景:
- 临时验证某个依赖是否真能从阿里云拉到(比如
mvn dependency:get -Dartifact=org.springframework:spring-core:5.3.37) - 团队强制要求所有项目走统一私有 Nexus,且 Nexus 已 upstream 阿里云
- CI 环境无法修改全局配置,只能靠
-s指定临时settings.xml
日常开发,坚持改对 settings.xml + 正确绑定 IDEA,才是可维护的方案。最容易被忽略的是:IDEA 启动方式(比如通过桌面图标 vs 终端命令)可能导致权限差异,使得它读不到 ~/.m2/settings.xml ——这时直接把配置文件路径填死在 IDEA 设置里最保险。









