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

相关推荐
TsengOnce8 小时前
Docker 安装达梦8数据库-5步成功
java·数据库
树码小子8 小时前
Spring框架:Spring程序快速上手
java·后端·spring
李松桃8 小时前
python第三次作业
java·前端·python
马士兵教育8 小时前
计算机专业学生入行IT行业,编程语言如何选择?
java·开发语言·c++·人工智能·python
本妖精不是妖精8 小时前
搭建 JNI 开发环境:使用 IntelliJ IDEA 和 CLion
java
老毛肚8 小时前
uniapp-ruoyi-spring部署宝塔
java·spring·uni-app
砚边数影8 小时前
决策树实战:基于 KingbaseES 的鸢尾花分类 —— 模型可视化输出
java·数据库·决策树·机器学习·分类·金仓数据库
夕除8 小时前
js--6
java·开发语言
冀辉8 小时前
局域网部署时实现基于https的业务系统访问
网络协议·http·https
手握风云-8 小时前
JavaEE 进阶第十三期:Spring Ioc & DI,从会用容器到成为容器(下)
java·spring·java-ee