问题现象
[ERROR] Could not transfer metadata com.cisdi.info.support:support-tagclient-api:1.0.0-SNAPSHOT/maven-metadata.xml
from/to maven-default-http-blocker (http://0.0.0.0/):
Blocked mirror for repositories: [cisdi-cloud (http://nexus.....cn/...)]
问题根源
Maven 3.8.1+ 版本的安全策略:
-
默认阻止所有 HTTP 协议的 Maven 仓库
-
自动启用
maven-default-http-blocker拦截器 -
只允许 HTTPS 协议的仓库访问
快速诊断步骤
1. 检查 Maven 版本
mvn --version
- 如果版本 ≥ 3.8.1,且使用 HTTP 仓库 → 可能遇到此问题
2. 检查仓库协议
查看 settings.xml 或 pom.xml 中的仓库 URL:
-
❌
http://开头 → 会被阻止 -
✅
https://开头 → 正常访问
3. 检查错误信息
错误信息中包含以下关键词即可确认:
-
maven-default-http-blocker -
Blocked mirror for repositories -
http://0.0.0.0/
解决方案(按优先级排序)
方案一:修改 Maven 配置(最常用)
适用场景:公司内部使用 HTTP 协议的 Nexus/Artifactory 仓库
在 ~/.m2/settings.xml 的 <mirrors> 部分添加:
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Override default http blocker</name>
<url>http://0.0.0.0/</url>
<blocked>false</blocked> <!-- 关键:设置为 false -->
</mirror>
位置示例:
<settings>
<mirrors>
<!-- 添加这个 mirror 来覆盖默认拦截器 -->
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<url>http://0.0.0.0/</url>
<blocked>false</blocked>
</mirror>
<!-- 原有的其他 mirrors 配置 -->
</mirrors>
</settings>
方案二:精确控制(推荐用于生产)
只为特定的内部仓库允许 HTTP:
<mirror>
<id>allow-internal-http</id>
<mirrorOf>cisdi-*,!central</mirrorOf> <!-- 匹配所有 cisdi 开头,排除中央仓库 -->
<name>Allow HTTP for internal repos</name>
<url>http://nexus.cisdi.cn/repository/maven-public/</url>
</mirror>
方案三:临时解决方案
# 1. 清理相关依赖的本地缓存
rm -rf ~/.m2/repository/com/cisdi
# 2. 强制更新(-U 参数)
mvn clean install -U
# 3. 如果还不行,尝试跳过 SSL 检查
mvn clean install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
方案四:升级仓库为 HTTPS(根本解决)
联系运维团队:
-
为 Nexus 配置 SSL 证书
-
将仓库 URL 从
http://改为https:// -
更新所有项目的
settings.xml
方案五:降级 Maven(不推荐)
# 降级到 3.8.1 之前的版本
# 下载地址:https://archive.apache.org/dist/maven/maven-3/
配置示例模板
完整的 settings.xml 修复模板
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<!-- 第一步:处理 Maven 3.8.1+ 的 HTTP 拦截问题 -->
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Allow HTTP for internal repositories</name>
<url>http://0.0.0.0/</url>
<blocked>false</blocked>
</mirror>
<!-- 第二步:配置公司内部仓库镜像 -->
<mirror>
<id>company-internal-repo</id>
<mirrorOf>internal-repo-id</mirrorOf>
<name>Company Internal Repository</name>
<url>http://nexus.company.com/repository/maven-public/</url>
</mirror>
<!-- 第三步:公共仓库使用 HTTPS 镜像(阿里云) -->
<mirror>
<id>aliyun-maven</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>company-profile</id>
<repositories>
<repository>
<id>internal-repo-id</id>
<url>http://nexus.company.com/repository/maven-public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>company-profile</activeProfile>
</activeProfiles>
</settings>
问题排查流程图
开始
↓
Maven 构建失败
↓
检查错误信息是否包含 "maven-default-http-blocker"
↓
是 → 检查 Maven 版本是否 ≥ 3.8.1
↓
是 → 检查仓库 URL 是否使用 http://
↓
是 → 确定解决方案:
1. 临时解决:清理缓存 + mvn -U
2. 配置解决:修改 settings.xml 添加 blocked=false
3. 永久解决:升级仓库为 HTTPS
↓
实施解决方案
↓
问题解决 ✓
常见错误配置
❌ 错误配置1:mirrorOf 不匹配
<mirror>
<id>cisdi-mirror</id>
<mirrorOf>central</mirrorOf> <!-- 只镜像 central,不匹配 cisdi 仓库 -->
<url>http://nexus.cisdigital.cn/...</url>
</mirror>
❌ 错误配置2:缺少 blocked=false
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<url>http://0.0.0.0/</url>
<!-- 缺少 <blocked>false</blocked> -->
</mirror>
预防措施
-
新项目设置:建议新项目全部使用 HTTPS 仓库
-
配置检查清单:
-
Maven 版本 ≥ 3.8.1
-
仓库协议为 https://
-
settings.xml 已处理 http-blocker
-
-
团队规范:统一团队内的 Maven 配置模板
-
CI/CD 环境:确保构建服务器配置一致
紧急联系方式
-
内部仓库管理员:xxx
-
Maven 配置文档:[内部文档链接]
-
历史解决方案:[公司知识库链接]
记住关键点 :Maven 3.8.1+ + HTTP 仓库 = 需要设置 blocked=false