使用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_ ... 
随机推荐
- Python Web学习笔记之多线程编程
			本次给大家介绍Python的多线程编程,标题如下: Python多线程简介 Python多线程之threading模块 Python多线程之Lock线程锁 Python多线程之Python的GIL锁 ... 
- Linux 命令安装bin文件
			Linux 命令安装bin文件 安装命令: //1,增加文件的可执行权限 chmod a+x jdk-6u30-linux-x64.bin //2,程序即安装在执行命令的文件夹下 ./jdk-6u30 ... 
- 20145101《Java程序设计》第二周学习总结
			20145101 <Java程序设计>第2周学习总结 教材学习内容总结 在第三章的学习中,我学到了很多新知识点,了解到Java语言中的类型及其变量主要类型为:整数,还有char型,bool ... 
- Disruptor学习笔记(一):基本原理和概念
			一.Disruptor基本原理 在多线程开发中,我们常常遇到这样一种场景:一些线程接受用户请求,另外一些线程处理这些请求.比如日志处理中的日志输入和告警.这种典型的生产者消费者场景十分常见,而生产者消 ... 
- Log4j将不同Package的日志输出到不同的文件的方法
			随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志.对外发送消息的日志: 后台常驻线程 ... 
- pip install MySQL-python
			在win7下安装了python后,想安装python-mysql,使用pip安装出现如下问题: pip install MySQL-pythonbuild\lib.win-amd64-2.7\_mys ... 
- getContext,getApplicationContext和this有什么区别
			使用this, 说明当前类是context的子类,一般是activity application等使用getApplicationContext 取得的是当前app所使用的application,这在 ... 
- 小朋友排队|2014年蓝桥杯B组题解析第十题-fishers
			小朋友排队 n 个小朋友站成一排.现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友. 每个小朋友都有一个不高兴的程度.开始的时候,所有小朋友的不高兴程度都是0. 如果某个小朋 ... 
- HDU 6148 Valley Numer (数位DP)题解
			思路: 只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零! 代码: #include<cstdio> #include<cstring> #include&l ... 
- Centos用yum方式安装nodejs和npm
			要通过 yum 来安装 nodejs 和 npm 需要先给 yum 添加 epel 源 ##添加 epel 源 rpm -ivh http://download.fedoraproject.org/p ... 
