java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决

这篇具有很好参考价值的文章主要介绍了java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目打包部署完成,用jar包在部署环境运行,在使用到poi相关的服务时报错
java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument
java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决
然后我查找了些解决办法,对处理方法做了梳理:

  1. 使用XSSWorkbook,使用时出错
  2. pom文件少引入依赖
  3. 包依赖冲突
  4. 使用模块没有声明所需依赖(这是我遇到的问题)
  5. 自己修改POIXMLDocumentPart文件中的代码
第一种情况解决办法:

最大的可能是引入的jar包过高或者过低
poi相关的poi有三个:poi、poi-ooxml、poi-ooxml-schemas

引入最佳版本是3.15版本

  • 过低,找不到方法导致报错
  • 过高,由于poi包系列更新较快,维护更新的版本不够稳定,导致很多问题

当然如果你使用的一直是高版本,就不需要强行下降版本,可能问题不是第一种,因为3.15版本也是隐藏些问题的。

第二种情况解决办法

在java操作word或excel抛出这样的异常时,一般情况下是pom文件少引入依赖

加上对应的pom里面的maven依赖

  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>4.1.0</version>
  </dependency>

一般这种情况较少,都会添加,但是也不除外是种被忽略的问题。

第三种情况解决办法

在pom文件引入依赖里面,引入了其它版本的jar包,导致运行时找不到对应的类

全局查询相关pom依赖,将多余的依赖文件移除

第四种情况解决办法

当前A模块没有引入所需依赖,引入依赖为主模块和公共B模块,导致运行时A模块中无法确定使用哪个类,类似于重复依赖

找到出现错误的类文件,我出错的类文件是FileStencilHandleUtils
java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决
然后找到这个类模块里面的pom,添加上依赖,然后往上找pom,找到公共pom和主pom文件,将里面的依赖去除。

这样就可以解决掉问题。当然如果还有其它模块需要用,可保留主pom,需要的模块声明所需依赖。

第五种情况解决办法

上述中已经表明poi系列有很多bug,可以通过自己对具体的方法修改,修补bug,但这个方法不适合所有人,谨慎使用

下载或者找到对应的jar包
java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决
将jar包解压,找到里面的文件XWPFStylesDocument.java文件
位置是在\org.apache.poi.xwpf.converter.core-1.0.6-sources\org\apache\poi\xwpf\converter\core\styles

打开文件,将文件中里面的方法进行修改

修改完成后,将整个模块放入代码中,或者重新打成jar包,依赖引入。

第五种解决方法来自于博主:「大魔王的日常Log」的原创文章
原文链接:https://blog.csdn.net/TaoShao521/article/details/126170434

————————————————

补充知识点:
NoClassDefFoundError问题 和 ClassNotFoundException问题不一样,前者一般发生在编译时能找到对应的类,但运行时找不到,后者发生在编译时就找不到对应的类。文章来源地址https://www.toymoban.com/news/detail-461007.html

到了这里,关于java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument问题排查解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包