从 Maven 3.8.1 版本开始,许多开发者在构建项目时可能会遇到一个意想不到的错误,提示无法下载依赖,并指向一个 HTTP 地址。这通常是由于 Maven 引入了一个名为 maven-default-http-blocker 的默认镜像。
本文将深入解析这个新特性背后的原因、它如何工作,并提供完整的解决方案,包括了详细的 settings.xml 路径说明。

这个问题源于 Maven 社区对安全的重视,旨在解决一个重要的安全漏洞 CVE-2021-26291。
因此,从 Maven 3.8.1 开始,Maven 默认引入了 maven-default-http-blocker 镜像,阻止所有以 http:// 开头的外部仓库访问,将请求重定向到无效的 http://0.0.0.0/ 地址,从而保护用户。
方案 | 操作步骤 | 优点 | 缺点 & 警告 |
|---|---|---|---|
方案一<br>(推荐)<br>升级为 HTTPS | 检查 pom.xml 或 settings.xml,将所有仓库 URL 从 http:// 修改为 https://。 | 最安全,最彻底,一劳永逸。 | 需要仓库支持 HTTPS,不适用于无法升级的遗留仓库。 |
方案二<br>(临时方案)<br>禁用阻断器 | 在 settings.xml 中添加或修改镜像规则来覆盖默认阻断器。 | 快速解决问题,无需修改项目 pom.xml。 | 不安全! 项目仍暴露在中间人攻击风险下。 |
这是最安全、最彻底的解决方案,也是 Maven 社区所提倡的最佳实践。
pom.xml 配置示例:
<project>
...
<repositories>
<repository>
<id>my-legacy-repo</id>
<url>http://my.legacy.repo.com/releases</url>
</repository>
<repository>
<id>my-legacy-repo</id>
<url>https://my.legacy.repo.com/releases</url>
</repository>
</repositories>
...
</project>如果您的项目依赖于一个 只支持 HTTP 的遗留仓库,您可以选择禁用这个阻断器。
警告: 这种做法 不安全,仅应作为 临时解决方案。
操作方式:
在 settings.xml 的 <mirrors> 标签内部添加以下配置。
settings.xml 配置示例:
<settings>
...
<mirrors>
<mirror>
<id>aliyunmaven</id>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>*,!maven-default-http-blocker</mirrorOf>
</mirror>
</mirrors>
...
</settings>settings.xml 文件路径详解理解 settings.xml 的位置至关重要,它通常有两种类型,取决于您使用的环境。
settings.xml (推荐修改)这是最常见的 settings.xml 文件,它只对当前用户有效,也是 IDEA 等 IDE 默认使用的文件。
.m2 隐藏文件夹中。 %USERPROFILE%\.m2\settings.xml~/.m2/settings.xmlsettings.xml (不推荐修改)这个文件用于配置 Maven 安装目录下的所有用户,通常由管理员维护。
conf 文件夹中。 $M2_HOME/conf/settings.xmlsettings.xmlIntelliJ IDEA 本身没有一个独立的 settings.xml 文件。它提供了一个配置界面,让您选择要使用的文件。默认情况下,IDEA 使用 用户级别 的 settings.xml 文件。
File -> Settings -> Build, Execution, Deployment -> Maven 选项中进行检查或修改。结论: 当您需要修改配置来解决此问题时,请优先修改您用户主目录下的 ~/.m2/settings.xml 文件。