NoSuchMethodError: ‘byte[] org.apache.poi.util.IOUtils.toByteArray(java.io.InputStream, int, int)‘

文章讲述了在开发过程中遇到的poi版本冲突问题,作者通过检查依赖、搜索关键字发现poi-ooxml5.2.2使用了poi4.1.2的方法,通过删除旧版本引用并添加poi5.2.2解决了Java.lang.NoSuchMethodError异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个在公司开发excel导出功能的bug

问题描述:

使用poi创建工作簿,XSSFWorkBook workBook = new XSSFWorkBook(inputStream);

报错:

java.lang.NoSuchMethodError: 'byte[] org.apache.poi.util.IOUtils.toByteArray(java.io.InputStream, int, int)'

问题排查:

1、使用idea提供的 show diagram功能检查依赖;

2、ctrl + F 搜索 ooxml关键字,可以看到有两个;

3、一个 4.1.2,一个 5.2.2;

# 我这边已经改掉了,所以5.2.2看不到了

4、进入日志提到的at org.apache.poi.openxml4j.util.ZipArchiveFakeEntry.<init>(ZipArchiveFakeEntry.java:82)

ZipArchiveFakeEntry 82行中;

可以很明显地看到:

注意参数列表:(InputStream,int,int)

注意所在的包:poi-ooxml 5.2.2

!!!但是 ctrl + 鼠标左键 点击 IOUtils.toByteArray,可以看到:

注意参数列表(InputStream,long,int);第二个参数是long!!!

注意IOUtils所在的包:poi 4.1.2

得出结论:poi-ooxml5.2.2的ZipArchiveFakeEntry类调用到了poi4.1.2的IOUtils的方法;

解决办法:我用的是第二种

1、删除一个pio-ooxml5.2.2的引用;

2、添加一个poi 5.2.2的引用;

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
    <scope>compile</scope>
</dependency>

总结:poi版本冲突的问题很多,我在网上没找到与我的问题一致的介绍,所以分享一下我的分析过程,希望对初学者有帮助,并且欢迎大神指点;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值