先确认失败的是哪一次 Maven 执行
适用于已经安装 Maven、在可信 Java 项目里遇到依赖或插件下载失败的人。命令参数按 Maven 3.9.11 官方参考核对;其他版本先查看自身帮助。本文是资料核对教程,未在你的项目、公司仓库或代理上实测。
- 在运行失败构建的同一个终端执行 mvn -v,记录 Maven、Java 和系统版本。若项目使用 Wrapper 或 IDE,记录它实际选用的 Maven、JDK 与用户设置文件,不能用另一个终端的成功代替。
- 保存首次失败附近的仓库地址、构件坐标及错误类型。先遮掉 URL 中的凭据和私有路径;不上传完整 settings.xml。
- 确认本次命令没有 -o,用户设置里也没有意外启用 offline。离线模式不会通过修改代理恢复下载。
mvn -v把代理、镜像和仓库账号分开
| 设置位置 | 解决的问题 | 不应填入的内容 |
|---|---|---|
| proxies / proxy | 请求通过哪个网络代理发出 | 仓库下载地址不是代理 host |
| mirrors / mirror | 哪些仓库请求改用指定镜像 | 本地 HTTP 代理端口不是 Maven 仓库 |
| servers / server | 访问仓库或镜像时使用的认证 | 不能用订阅 token 代替仓库账号 |
Maven 会合并安装目录 conf/settings.xml 与用户目录 .m2/settings.xml,冲突时用户设置优先。镜像的 id 用于匹配 servers 中对应的认证项;只改镜像地址而忽略身份配置,可能把连通问题变成认证问题。具体仓库授权仍由仓库管理员确认。
用独立设置文件验证 HTTP 代理
- 先记下客户端实际启用的 HTTP 或 mixed 监听地址和端口。下例 7890 只是端口占位示例,必须替换;纯 SOCKS 端口不适用这份 HTTP 配置。
- 在用户控制的私有目录新建 settings-roxi-test.xml。若原项目依赖公司镜像、仓库授权或配置 profile,应以原用户设置的本地副本为基础,仅合并 proxies,不覆盖整个文件。已有活动代理时先记录,再只保留一个需要测试的活动项。
- 下面是没有其他用户配置时的完整最小示例;host 只写主机,不能写成 http://127.0.0.1:7890。nonProxyHosts 用竖线分隔,内网域名是否需要绕过由实际网络决定。
<settings>
<proxies>
<proxy>
<id>local-test</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7890</port>
<nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
</settings>- 在可信项目中,把 -s 与临时文件路径加到原来失败的命令。下例 compile 会运行项目构建并写入 target、下载文件到本地 Maven 缓存;无需管理员权限。请勿在不明项目上运行构建插件。
- 网络或设置修好后仍提示先前的下载失败被缓存,可做一次 -U 重查;它会检查缺失的 release 和更新的 snapshot,并不是清空所有缓存或修复认证。保持原有项目参数,避免同时升级依赖。
mvn -s "./settings-roxi-test.xml" -U compile根据新的错误决定下一步
| 实际现象 | 下一步 |
|---|---|
| 连接代理地址被拒绝或超时 | 核对监听进程、地址、端口和运行环境 |
| 镜像或仓库返回认证失败 | 核对实际目标及 servers 的 id;请求管理员核实权限 |
| 出现证书链错误 | 记录 Maven 使用的 JDK;按组织要求检查信任链,不关闭校验 |
| 下载成功,随后编译失败 | 联网阶段已前进,继续处理代码或构建错误 |
| 只有 IDE 失败 | 核对 IDE 的 Maven、设置文件和离线模式是否与成功命令一致 |
验收原任务,再撤回临时配置
- 确认原来失败的那个构件确实下载成功,并重跑原任务。全部命中缓存的一次成功不能证明代理路线;需要时对照本次真实下载日志与代理连接记录。
- 临时验证结束,后续命令去掉 -s 和仅为本次加入的 -U,恢复原入口。临时 XML 如果包含账号,按本地敏感文件处理,完成后移除;不要删除整个 .m2 缓存。
- 仍失败时提交 Maven/JDK 版本、脱敏构件信息、实际仓库主机、错误阶段、是否仅 IDE 失败和一次对照结果。保留用户原配置作为恢复依据。