NoClassDefFoundError for POIXMLTypeLoader

在windows下面下载文件没问题,在linux下在报错如下:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.POIXMLTypeLoader
at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook$Factory.newInstance(Unknown Source)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:425)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:227)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:218)
at com.winning.tplife.core.common.utils.ExcelUtils.makeWorkbook(ExcelUtils.java:117)
在网上看了一些资料 引用了 poi ,poi-ooxml ,dom4j ,poi-ooxml-schemas ,xmlbean,stax-api,jar包,但是还是包同样的错,看日志里面也扫到了这些jar。
我浏览了一下包,找不到任何poixmltypeloader类。这是一个已知的问题吗?有人能回答我吗
谢谢了 帮忙看一下

Could not initialize class org.apache.poi.POIXMLTypeLoader;这是找不到类,你要看你的jar包的版本号,poi低版本好像要依赖包,最好用高版本的,
用maven管理jar包吧,我用poi的时候好像记得就导入了两个包吧,你在官网下载看看那几个包

http://lucene.472066.n3.nabble.com/jira-Created-TIKA-1833-NoClassDefFoundError-for-POIXMLTypeLoader-td4251354.html

感觉jdk版本的问题,确认版本是否一致

POI 4.x版本新建Workbook 报错org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbea...
转载自:https://www.jianshu.com/p/96f190469c95
小罗不吃菜
2020.01.03 12:03:22
字数 224阅读 1,492

异常中写的比较清晰,org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit方法找不到,但是项目时maven项目,不应该缺少依赖,查看xmlbeans发现XmlOptions class中的确没有setEntityExpansionLimit方法,估计是版本不匹配(使用的是2.x版本的xmlbeans)
不知道是因为之前使用的旧版POI的残留缓存导致idea识别问题还是官方poi自己的依赖搞错了,
解决方案:在poi的引入中手动排除xmlbeans依赖:

  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
    <exclusions>
      <exclusion>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

手动引入新版的xmlbeans依赖:

  <dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>3.1.0</version>
  </dependency>

maven Reimport一下依赖,项目 Rebuild一下,再次执行,问题就解决了。
当然,如果是因为我们的项目缓存导致的,那其实是不需要这么麻烦手动排除依赖,只需要删除maven库中的旧xmlbeans包,在Reimport 依赖即可。

总结:是由于poi与xmibeans两者的版本不匹配导致的问题。