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

升级org.apache.poi-poi-ooxml至5.2.4后遇java.lang.NoSuchMethodError求助

问题分析与解决方案

问题背景

将org.apache.poi:poi-ooxml从5.2.3升级到5.2.4后,运行时抛出java.lang.NoSuchMethodError异常,报错信息如下:

[ERROR] ErrorPageFilter - Forwarding to error page from request [/reports/myapp/myreport] due to exception ['org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream.builder()']
java.lang.NoSuchMethodError: 'org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream.builder()'
at org.apache.poi.xssf.usermodel.XSSFWorkbook.newPackage(XSSFWorkbook.java:521) ~[poi-ooxml-5.2.4.jar:5.2.4]
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:231) ~[poi-ooxml-5.2.4.jar:5.2.4]
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:227) ~[poi-ooxml-5.2.4.jar:5.2.4]
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:215) ~[poi-ooxml-5.2.4.jar:5.2.4]
at myapp.reports.service.impl.MyReportsExcelExporter.(MyReportsExcelExporter.java:37) ~[classes/:0.0.1-SNAPSHOT]

触发异常的代码:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class MyReportsExcelExporter {
    protected XSSFWorkbook workbook;
    ...
    public MyReportsExcelExporter() {
        this.workbook = new XSSFWorkbook(); // 初始化Workbook时触发异常
    }
    ...
}

原因

这是依赖版本不兼容导致的:

  • POI 5.2.4版本对commons-io的依赖版本要求提升到了2.11.0及以上,该版本新增了UnsynchronizedByteArrayOutputStream.builder()方法。
  • 项目中当前使用的commons-io版本低于2.11.0,导致POI调用该方法时找不到对应的实现,抛出NoSuchMethodError。

解决方案

  • 升级commons-io版本:在项目的依赖管理文件中,明确指定commons-io版本为2.11.0或更高(POI 5.2.4官方依赖版本为2.11.0)。
    • Maven示例:
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.11.0</version>
      </dependency>
      
    • Gradle示例:
      implementation 'commons-io:commons-io:2.11.0'
      
  • 排查依赖冲突:使用依赖分析工具(如Maven的mvn dependency:tree或Gradle的./gradlew dependencies)检查项目中是否有其他依赖引入了旧版本的commons-io,排除低版本的传递依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:24