You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加storm-hive依赖后Maven编译失败问题排查

问题分析与解决方案

1. 为什么最初编译没有错误?

你第一次编译成功是因为项目的依赖环境完全稳定:

  • 你明确声明的commons-lang3:3.3.2在本地仓库存在,其中包含unescapeJson方法,代码调用完全匹配
  • 项目中JSON相关的依赖版本统一,相关方法抛出的异常不需要显式捕获/声明(比如当时依赖的JSON库版本中,对应方法抛出的是未检查异常,或者你的代码已经隐式兼容)

添加storm-hive依赖后,Maven的依赖传递机制引入了冲突的依赖版本,直接破坏了原有的依赖环境,才触发了这些编译错误。

2. 依赖功能失效的原因与修复方案

核心问题根源

storm-hive:1.1.1本身依赖了更高版本的commons-lang3(你可以执行mvn dependency:tree命令查看具体版本,大概率是3.4及以上),Maven的依赖调解机制会优先选择路径更短或声明更晚的依赖版本,这就导致你的项目实际使用的commons-lang3被替换成了更高版本——而unescapeJson方法在3.4及以后的版本中被移除了,所以编译时提示找不到符号。

至于JSONException的错误,同样是依赖传递引入了不同版本的JSON库,新版本的JSON方法可能将原本的未检查异常改为了已检查异常,要求必须显式捕获或声明抛出。

具体修复步骤

  1. 排除storm-hive中的冲突依赖
    在你的storm-hive依赖声明中,添加排除规则,强制项目继续使用你指定的commons-lang3:3.3.2:

    <dependency>
      <groupId>org.apache.storm</groupId>
      <artifactId>storm-hive</artifactId>
      <version>1.1.1</version>
      <!-- 排除冲突的commons-lang3版本 -->
      <exclusions>
        <exclusion>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    
  2. 验证依赖环境
    执行mvn dependency:tree命令,确认输出中commons-lang3的版本只有3.3.2,没有其他版本的引入。

  3. 处理JSONException(按需操作)
    如果排除冲突后仍然有JSONException错误,说明storm-hive还引入了冲突的JSON库,同样用排除规则移除它;或者检查项目中原本的JSON依赖版本,确保依赖统一。如果是代码层面需要处理异常,就按照编译提示,在对应的方法上添加throws org.json.JSONException,或者在调用处用try-catch捕获。

  4. 重新编译
    执行mvn clean compile,应该就能正常通过编译了。


内容的提问来源于stack exchange,提问作者Albatross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:57:06