項(xiàng)目打包部署完成,用jar包在部署環(huán)境運(yùn)行,在使用到poi相關(guān)的服務(wù)時(shí)報(bào)錯(cuò)
java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument
然后我查找了些解決辦法,對(duì)處理方法做了梳理:
- 使用XSSWorkbook,使用時(shí)出錯(cuò)
- pom文件少引入依賴(lài)
- 包依賴(lài)沖突
- 使用模塊沒(méi)有聲明所需依賴(lài)(這是我遇到的問(wèn)題)
- 自己修改POIXMLDocumentPart文件中的代碼
第一種情況解決辦法:
最大的可能是引入的jar包過(guò)高或者過(guò)低
poi相關(guān)的poi有三個(gè):poi、poi-ooxml、poi-ooxml-schemas
引入最佳版本是3.15版本
- 過(guò)低,找不到方法導(dǎo)致報(bào)錯(cuò)
- 過(guò)高,由于poi包系列更新較快,維護(hù)更新的版本不夠穩(wěn)定,導(dǎo)致很多問(wèn)題
當(dāng)然如果你使用的一直是高版本,就不需要強(qiáng)行下降版本,可能問(wèn)題不是第一種,因?yàn)?.15版本也是隱藏些問(wèn)題的。
第二種情況解決辦法
在java操作word或excel拋出這樣的異常時(shí),一般情況下是pom文件少引入依賴(lài)
加上對(duì)應(yīng)的pom里面的maven依賴(lài)
<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>
一般這種情況較少,都會(huì)添加,但是也不除外是種被忽略的問(wèn)題。
第三種情況解決辦法
在pom文件引入依賴(lài)?yán)锩?,引入了其它版本的jar包,導(dǎo)致運(yùn)行時(shí)找不到對(duì)應(yīng)的類(lèi)
全局查詢(xún)相關(guān)pom依賴(lài),將多余的依賴(lài)文件移除
第四種情況解決辦法
當(dāng)前A模塊沒(méi)有引入所需依賴(lài),引入依賴(lài)為主模塊和公共B模塊,導(dǎo)致運(yùn)行時(shí)A模塊中無(wú)法確定使用哪個(gè)類(lèi),類(lèi)似于重復(fù)依賴(lài)
找到出現(xiàn)錯(cuò)誤的類(lèi)文件,我出錯(cuò)的類(lèi)文件是FileStencilHandleUtils
然后找到這個(gè)類(lèi)模塊里面的pom,添加上依賴(lài),然后往上找pom,找到公共pom和主pom文件,將里面的依賴(lài)去除。
這樣就可以解決掉問(wèn)題。當(dāng)然如果還有其它模塊需要用,可保留主pom,需要的模塊聲明所需依賴(lài)。
第五種情況解決辦法
上述中已經(jīng)表明poi系列有很多bug,可以通過(guò)自己對(duì)具體的方法修改,修補(bǔ)bug,但這個(gè)方法不適合所有人,謹(jǐn)慎使用
下載或者找到對(duì)應(yīng)的jar包
將jar包解壓,找到里面的文件XWPFStylesDocument.java文件
位置是在\org.apache.poi.xwpf.converter.core-1.0.6-sources\org\apache\poi\xwpf\converter\core\styles
打開(kāi)文件,將文件中里面的方法進(jìn)行修改
修改完成后,將整個(gè)模塊放入代碼中,或者重新打成jar包,依賴(lài)引入。
第五種解決方法來(lái)自于博主:「大魔王的日常Log」的原創(chuàng)文章
原文鏈接:https://blog.csdn.net/TaoShao521/article/details/126170434
————————————————文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-461007.html
補(bǔ)充知識(shí)點(diǎn):
NoClassDefFoundError問(wèn)題 和 ClassNotFoundException問(wèn)題不一樣,前者一般發(fā)生在編譯時(shí)能找到對(duì)應(yīng)的類(lèi),但運(yùn)行時(shí)找不到,后者發(fā)生在編譯時(shí)就找不到對(duì)應(yīng)的類(lèi)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461007.html
到了這里,關(guān)于java.lang.NoClassDefFoundError: org.apache.poi.POIXMLDocument問(wèn)題排查解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!