Maven本地仓库默认路径为Linux/macOS的~/.m2/repository或Windows的C:\Users{用户名}.m2\repository,可通过修改~/.m2/settings.xml中的标签自定义路径,注意使用绝对路径且需手动迁移旧数据。

本地仓库路径默认在哪,怎么改
Java 项目中 Maven 的本地仓库默认是 ~/.m2/repository(Linux/macOS)或 C:\Users\{用户名}\.m2\repository(Windows)。这个位置由 Maven 自动创建,所有下载的依赖(.jar、.pom)都缓存在这里。
想改路径?直接修改 ~/.m2/settings.xml(若不存在可复制 $M2_HOME/conf/settings.xml 创建),在 标签下加:
/path/to/your/local/repo
注意:settings.xml 文件必须是 UTF-8 编码;路径不要以 ~ 或环境变量开头(如 $HOME),Maven 不解析这些;改完后旧仓库不会自动迁移,需手动复制或等下次构建时重下。
远程仓库怎么配:中央仓、阿里云镜像、私有 Nexus
Maven 默认只连中央仓库(https://repo.maven.apache.org/maven2/),但国内直连慢且不稳定。通常做法是配置镜像()或显式声明仓库()。
立即学习“Java免费学习笔记(深入)”;
常用配置方式:
- 用阿里云镜像替代中央仓库(推荐,全局生效):在
settings.xml的下加
aliyunmaven * Aliyun Maven https://maven.aliyun.com/repository/public
表示拦截所有仓库请求;若只想镜像中央仓,写 central;若同时用 Nexus 私服,别设为 *,否则私服请求也被转发走。
- 项目级添加私有仓库(如 Nexus):在
pom.xml的中声明
nexus-snapshots https://nexus.example.com/repository/maven-snapshots/ false true
注意: 必须和 settings.xml 中 的 一致(用于认证); 控制是否允许拉取对应类型构件;Nexus 地址末尾斜杠不能少,否则部分版本会 404。
为什么 settings.xml 里配了镜像,但 pom.xml 还是连了中央仓
常见现象:明明 settings.xml 配了阿里云镜像,执行 mvn clean compile 却仍看到日志里出现 Downloading from central: —— 这不是失败,而是 Maven 的日志误导。
真实原因有三个:
- Maven 日志里显示的
central是仓库逻辑 ID,不是实际 URL;只要镜像匹配成功,请求就发到了镜像地址,只是日志没更新显示名 -
pom.xml显式声明了且为central,会绕过镜像(镜像只作用于未显式声明的仓库) - 插件依赖(如
maven-compiler-plugin)从插件仓库下载,而插件仓库默认是pluginRepositories,需单独配镜像或声明
验证是否真走镜像:打开 ~/.m2/repository/.cache/maven-central/(或对应路径),看里面是否有 aliyun 字样缓存文件;或用 mvn -X 查看 debug 日志中实际 HTTP 请求的 URL。
多仓库共存时的优先级与冲突处理
当项目同时涉及中央仓、镜像、私有 Nexus、JitPack 等多个源,Maven 按以下顺序查找依赖:
- 先查本地仓库(
.m2/repository) - 再按
pom.xml中声明顺序依次请求远程仓库(跳过被镜像覆盖的) - 若未声明,才 fallback 到
settings.xml中镜像所指向的目标仓库
关键点:
-
的值支持通配符,但匹配规则严格:external:*不匹配 localhost;*,!nexus表示“所有仓库,除了 id=nexus 的” - 如果两个镜像都匹配同一个仓库 ID,只有第一个生效(按 XML 顺序)
- 私有仓库应放在
pom.xml而非settings.xml,避免泄露敏感地址到团队共享配置中
最易被忽略的是:settings.xml 中的 激活状态会影响镜像是否启用——没激活 profile,镜像配置就等于不存在。










