Maven HTTP 仓库被阻止问题解决总结

问题现象

复制代码
[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+ 版本的安全策略

  1. 默认阻止所有 HTTP 协议的 Maven 仓库

  2. 自动启用 maven-default-http-blocker 拦截器

  3. 只允许 HTTPS 协议的仓库访问

快速诊断步骤

1. 检查 Maven 版本

复制代码
mvn --version
  • 如果版本 ≥ 3.8.1,且使用 HTTP 仓库 → 可能遇到此问题

2. 检查仓库协议

查看 settings.xmlpom.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(根本解决)

联系运维团队:

  1. 为 Nexus 配置 SSL 证书

  2. 将仓库 URL 从 http:// 改为 https://

  3. 更新所有项目的 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>

预防措施

  1. 新项目设置:建议新项目全部使用 HTTPS 仓库

  2. 配置检查清单

    • Maven 版本 ≥ 3.8.1

    • 仓库协议为 https://

    • settings.xml 已处理 http-blocker

  3. 团队规范:统一团队内的 Maven 配置模板

  4. CI/CD 环境:确保构建服务器配置一致

紧急联系方式

  • 内部仓库管理员:xxx

  • Maven 配置文档:内部文档链接

  • 历史解决方案:公司知识库链接


记住关键点 :Maven 3.8.1+ + HTTP 仓库 = 需要设置 blocked=false

相关推荐
Hui Baby15 分钟前
Spring Security
java·后端·spring
IT笔记1 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
我才是银古1 小时前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri
TPBoreas2 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
敲代码的嘎仔2 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
编程(变成)小辣鸡2 小时前
Spring事务失效场景
java·后端·spring
极客先躯3 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
tachibana24 小时前
hot100 翻转二叉树(226)
java·数据结构·算法·leetcode
brave_zhao4 小时前
nginx的进程架构
java·学习·nginx
兰令水4 小时前
leecodecode【面试150】【2026.7.9打卡-java版本】
java·数据结构·leetcode·面试·职场和发展