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

相关推荐
雨中飘荡的记忆1 天前
ElasticJob分布式调度从入门到实战
java·后端
考虑考虑1 天前
JDK25模块导入声明
java·后端·java ee
_小马快跑_1 天前
Java 的 8 大基本数据类型:为何是不可或缺的设计?
java
Re_zero2 天前
线上日志被清空?这段仅10行的 IO 代码里竟然藏着3个毒瘤
java·后端
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot
程序员清风2 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林5512 天前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊3 天前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing3 天前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠3 天前
各版本JDK对比:JDK 25 特性详解
java