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

相关推荐
盖世英雄酱581365 小时前
不是所有的this调用会导致事务失效
java·后端
少许极端6 小时前
Redis入门指南(五):从零到分布式缓存-其他类型及Java客户端操作redis
java·redis·分布式·缓存
宠..7 小时前
优化文件结构
java·服务器·开发语言·前端·c++·qt
sheji34167 小时前
【开题答辩全过程】以 疫情物资捐赠系统为例,包含答辩的问题和答案
java
sinat_255487817 小时前
InputStream/OutputStream小讲堂
java·数据结构·算法
乌日尼乐7 小时前
【Java基础整理】java数组详解
java·后端
tkevinjd7 小时前
IO流6(转换流、序列化与反序列化流)
java
三两肉7 小时前
HTTP/1.1到HTTP/3:互联网通信协议的三代演进之路
网络·网络协议·http·http3·http2·http1.1
三两肉7 小时前
HTTP 缓存详解
网络协议·http·缓存
虫小宝7 小时前
导购类电商平台搜索推荐融合:基于用户行为的个性化导购系统
java