Exception java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
不会替换 jar 包可以参考这篇文章 不重新打包,只修改 jar 包中的某个文件、某个类
1. 功能:Word 转 PDF
2. 使用包的版本如下
POI PDF
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.itext.extension</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.core</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
<version>1.0.6</version>
</dependency>
3. 问题:
关键出错 jar 包:org.apache.poi.xwpf.converter.core
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart
at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.getFontsDocument(XWPFStylesDocument.java:1477)
at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.<init>(XWPFStylesDocument.java:190)
at org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument.<init>(XWPFStylesDocument.java:184)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.createStylesDocument(XWPFDocumentVisitor.java:166)
at org.apache.poi.xwpf.converter.core.XWPFDocumentVisitor.<init>(XWPFDocumentVisitor.java:159)
at org.apache.poi.xwpf.converter.pdf.internal.PdfMapper.<init>(PdfMapper.java:149)
at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:55)
at org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:38)
at org.apache.poi.xwpf.converter.core.AbstractXWPFConverter.convert(AbstractXWPFConverter.java:45)
at com.test.WordPdfUtils.wordConverterToPdf(WordPdfUtils.java:113)
at com.test.WordPdfUtils.wordConverterToPdf(WordPdfUtils.java:66)
at com.test.WordPdfUtils.main(WordPdfUtils.java:47)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.POIXMLDocumentPart
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
3. 原因:POI高版本的包中 org.apache.poi.POIXMLDocumentPart 类的改动很大,而相应的 pdf 包已经很久没有维护目前是1.0.6(如果使用POI3.0的版本还是可以的)
4. 解决方案
(2-1) 下载源码,org.apache.poi.xwpf.converter.core 源码包下载链接
(2-2) 修改 org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument 类中调用 POIXMLDocumentPart 的部分
一共四行代码,第一行是引包,其他三行是一样的,详细见下图
5. 打包方法参考
(1)修改后自己正常打包就可以,手动替换一下本地 maven 目录下的 org.apache.poi.xwpf.converter.core 包
(2)或者可以在自己的项目中,单独创建这个目录和修改后的类
6. 资源
修改后的类以及Word转PDF工具类
(修改后的 org.apache.poi.xwpf.converter.core.styles.XWPFStylesDocument
以及Word转PDF的工具类)
转载请注明:Exception java.lang.NoClassDefFoundError: org/apache/poi/POIXMLDocumentPart | 胖虎的工具箱-编程导航