settings.xml中的id必须与/的id严格一致且大小写敏感;密码须用mvn --encrypt-password加密并配置master密码;账号需在私服平台授予对应仓库的read/deploy权限;多profile时需通过激活。

settings.xml 里 <server></server> 标签必须用 id 匹配仓库配置
私服认证账号密码不是写进去就能生效的,核心在于 <server></server> 的 id 必须和 <repository></repository> 或 <pluginrepository></pluginrepository> 中的 id 完全一致,否则 Maven 根本不会去查这个账号。
-
<server></server>的id是唯一查找键,大小写敏感,不能含空格或特殊字符 - 如果私服仓库在
pom.xml里声明了<id>my-nexus</id>,那settings.xml里就得配<server><id>my-nexus</id>...</server></li> <li>若用的是 <code><mirror>
(比如把中央仓镜像到私服),则<server></server>的id要和<mirror></mirror>的id对齐,而不是和原始仓库 id 对齐
密码不能明文写在 settings.xml 里,得用 mvn --encrypt-password
Maven 从 2.1.0 开始强制要求加密密码,明文 <password>xxx</password> 会被忽略,且不报错——这是最常被卡住的地方:你填了密码,但始终 401。
- 先用命令行生成加密串:
mvn --encrypt-password your-plain-password - 输出结果类似
{jSMOWnoPFgsHVpMvz5VrIt5kR1bz6E537gR3J5QyJ/8=},直接粘贴进<password></password>标签内 - 确保本地
~/.m2/settings-security.xml存在且含有效的 master 密码(mvn --encrypt-master-password生成),否则加密失败 - Windows 下 cmd 可能因编码问题导致加密串乱码,建议用 Git Bash 或 PowerShell 执行
账号权限不足时,常见错误是 401 Unauthorized 或 403 Forbidden
即使配置全对、密码已加密,仍报 401/403,大概率是 Nexus/Artifactory 上账号没开对应仓库的 read(下载)或 deploy(上传)权限。
- Nexus 3 默认不给新用户分配任何角色,需手动加
nexus-admin或自定义角色,并绑定到对应仓库的nx-repository-view-*-*-read权限 - Artifactory 中检查用户是否在目标仓库的
Deploy/Cache和Read权限组里 - 如果私服启用了匿名访问,但你又配了账号,Maven 会优先走认证流程;此时若账号无权,反而比匿名更早失败
多环境切换时,别漏掉 <activeprofiles></activeprofiles> 绑定
当 settings.xml 里有多个 <profile></profile>(比如 dev / prod 私服),光配 <server></server> 不够,还得确保当前 profile 被激活,否则 <server></server> 不加载。
- 检查
<activeprofiles></activeprofiles>是否包含对应 profile 的id,或用mvn help:active-profiles确认 - 避免在
<profile></profile>内部再嵌套<servers></servers>——<server></server>只能放在<servers></servers>根节点下,profile 里只能放<repositories></repositories>和<pluginrepositories></pluginrepositories> - CI 环境(如 Jenkins)常覆盖
settings.xml,要确认实际生效的是哪一份,可用mvn help:effective-settings查看最终合并结果
真正麻烦的从来不是怎么配,而是哪个环节静默失效:id 对不上、密码没加密、权限没开、profile 没激活——四个地方都得挨个盯住,少一个就卡在 401 里出不来。










