使用POI导入EXCEL报java.lang.IncompatibleClassChangeError
使用POI导入xls格式的excel报java.lang.IncompatibleClassChangeError异常,而导入xlsx正常。
I'm almost certain that you have an older version of POI on your classpath
基本可以确定,是包含了一个老版本的POI导致的。
通过在服务器上编译,发现此致命错误
found : org.apache.poi.hssf.usermodel.HSSFWorkbook
required: org.apache.poi.ss.usermodel.Workbook
几经检查,都没有发现有其他版本的POI。最终,参考官方FAQ文档,
ClassLoader classloader =
org.apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
java.net.URL res = classloader.getResource(
"org/apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("POI Core came from " + path); classloader = org.apache.poi.POIXMLDocument.class.getClassLoader();
res = classloader.getResource("org/apache/poi/POIXMLDocument.class");
path = res.getPath();
System.out.println("POI OOXML came from " + path); classloader = org.apache.poi.hslf.HSLFSlideShow.class.getClassLoader();
res = classloader.getResource("org/apache/poi/hslf/HSLFSlideShow.class");
path = res.getPath();
System.out.println("POI Scratchpad came from " + path);
定位到原因是以前有人将POI包直接解压到了JAVA_TOP路径下,所以和我的产生了冲突。
啊,多么痛的领悟。
再三检查,靠,那哥们儿解压的POI已经不知道是哪个年月的版本的了。
心中真是有一万个草泥马在狂飙。真想揪出来打一顿。
终极大招:
将java源文件丢到服务器上编译,根据报错再一个个导入class文件。
好不容易编译时通过,结果报了运行时异常:
Exception in thread "main" java.lang.NoSuchMethodError: org/apache/poi/POIDocument.<init>(Lorg/apache/poi/poifs/filesystem/DirectoryNode;)V
最后才发现是poi中各jar版本冲突 ,例如 其他包都是用的3.8的,但是poi.jar用的是3.6的版本,所以就报错了,将3.6的删掉,加入3.8的版本即可。
最后,迫不得已,放出最后杀招:将那哥们儿的先备份了,然后直接删除。
参考资料:
java.lang.IncompatibleClassChangeError:
POI 3.7 java.lang.IncompatibleClassChangeError when instantiating a Font
使用POI导入EXCEL报java.lang.IncompatibleClassChangeError的更多相关文章
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- 【JUnit 报错】java.lang.IncompatibleClassChangeError
使用Junit 测试spring时候报错: java.lang.IncompatibleClassChangeError: class org.springframework.core.LocalVa ...
- java.lang.IncompatibleClassChangeError: Implementing class的解决办法,折腾了一天总算解决了
一,问题产生背景 git更新代码重启服务器后,问题就莫名奇妙的产生了,一看报错信息,基本看不懂,然后上百度去查,基本都是说jar包冲突,于是把矛头指向maven 二,问题的解决过程 既然确定了是mav ...
- [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
1:出现此种错误应该是jar版本包冲突了,启动hive的时候,由于hive依赖hadoop,启动hive,会将hadoop的配置以及jar包等等导入到hive中,导致jar包版本冲突,下面贴一下错误, ...
- java.lang.IncompatibleClassChangeError:可以考虑是否是jar包冲突
一.背景:启动tomcat的时候,报错: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.cla ...
- Caused by: java.lang.IncompatibleClassChangeError: Implementing class
Caused by: java.lang.IncompatibleClassChangeError: Implementing class 可能是导入的jar包重复. 尤其在Maven引用中,请查看是 ...
- Maven的包依赖冲突可引发java.lang.IncompatibleClassChangeError错误
新版API上线后,发现LOG文件没有正常输出.查看Tomcat的Log文件发现如下的错误信息 May , :: AM com.sun.xml.ws.server.sei.EndpointMethodH ...
- eclipse 运行报java.lang.OutOfMemoryError: PermGen space解决方法
一.在window下eclipse里面Server挂的是tomcat6,一开始还是以为,tomcat配置的问题,后面发现,配置了tomcat里面的catalina.bat文件,加入 set JAVA_ ...
随机推荐
- mysql分类和事务回滚
主要内容: ***数据定义语言DDL重点 ***数据操纵语言DML重点 数据查询语言DQL重点 ---事务控制语言TCL ---数据库控制语言DCL ---主键(primary key) ---数据冗 ...
- 怎么说, 开发会很乐意去主动修改bug?
怎么说, 开发会很乐意去主动修改bug? 一图顶上千言万语,如下:
- Android 基础知识点(一)
- SQLSERVER中order by ,group by ,having where 的先后顺序
SELECT [Name] FROM [LinqToSql].[dbo].[Student] where name='***' group by name having (name='* ...
- Python3基础 dict items 以元组的形式打印出字典的每一个项
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- STM32定时器的预装载寄存器与影子寄存器之间的关系【转】
首先转载: STM32定时器的预装载寄存器与影子寄存器之间的关系 本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/produc ...
- 安装PyInstaller打包python
安装PyInstaller 对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定: pip install pyinstaller 通常我们会下载源码包,然后进入包目录,执行 ...
- 【ssh免登录】设置集群环境ssh免登录步骤
1.每台机器都需要执行,生成自己的密钥 # ssh-keygen -t rsa 过程中遇到选项,全部enter #cd ~/.ssh # cat id_rsa.pub > authorized_ ...
- [luogu 3957]跳房子
题目链接 50分做法 挺显然的一个做法,因为金币量是单调的(如果你花i枚金币可以得到最优解,i+1枚也一定可以),所以可以二分答案 然后对于二分出来的每个答案,都做一遍dp,效率$O(n^2logn) ...
- 12_Python操作MySQL(basic)
""" Test connection to MySQL using mysql-client conn = MySQLdb.connect(host,port,user ...