最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

EasyExcel與Apache POI版本沖突導(dǎo)致`NoSuchMethodError`異常的解決方法

 更新時(shí)間:2025年11月13日 08:37:04   作者:代碼怪獸大大作戰(zhàn)  
本文介紹了EasyExcel與ApachePOI版本沖突導(dǎo)致`NoSuchMethodError`異常的原因,并提供了兩種解決方案:排除EasyExcel自帶的POI并手動(dòng)指定統(tǒng)一版本,或者移除自己引入的POI,同時(shí),也強(qiáng)調(diào)了在使用EasyExcel時(shí)避免單獨(dú)引入POI的重要性,需要的朋友可以參考下

最近在使用 EasyExcel 導(dǎo)出 Excel 時(shí),遇到了類似這樣的異常:

Caused by: java.lang.NoSuchMethodError: org.apache.poi.util.StringUtil.isNotBlank(Ljava/lang/CharSequence;)Z
    at org.apache.poi.openxml4j.opc.OPCPackage.close(OPCPackage.java:462)
    at org.apache.poi.ooxml.POIXMLDocument.close(POIXMLDocument.java:189)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.close(XSSFWorkbook.java:610)
    at org.apache.poi.xssf.streaming.SXSSFWorkbook.close(SXSSFWorkbook.java:972)
    at com.alibaba.excel.context.WriteContextImpl.finish(WriteContextImpl.java:383)

這個(gè)錯(cuò)誤在 Stack Overflow 和國(guó)內(nèi)社區(qū)里都出現(xiàn)過(guò)很多次。

看起來(lái)像是 POI 的 bug,但其實(shí) 根本原因是 “依賴沖突 + 版本不兼容”。

一、背景:EasyExcel 與 Apache POI 的關(guān)系

阿里巴巴的 EasyExcel 是一個(gè)基于 Apache POI 封裝的輕量級(jí) Excel 操作框架。

也就是說(shuō):

  • EasyExcel 本身不直接操作 XLSX 文件;
  • 它在底層依然依賴 Apache POI(poi、poi-ooxml、poi-ooxml-schemas) 來(lái)讀寫文件。

因此,當(dāng)你的項(xiàng)目中出現(xiàn)多個(gè) POI 版本時(shí),很容易導(dǎo)致類加載沖突。

二、典型錯(cuò)誤場(chǎng)景

場(chǎng)景一:項(xiàng)目中已引入了 POI,再引入 EasyExcel

舉個(gè)例子:

<!-- 你自己引入的 POI -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

<!-- 后來(lái)又加了 EasyExcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>

這時(shí)候,項(xiàng)目中會(huì)同時(shí)存在兩套 POI 版本:

依賴來(lái)源版本特點(diǎn)
你自己的 POI3.17老版本,沒(méi)有 StringUtil.isNotBlank 方法
EasyExcel 內(nèi)部 POI4.x新版本,增加了 isNotBlank 方法

當(dāng) JVM 加載類時(shí),如果先加載了舊版本的 poi,

EasyExcel 內(nèi)部再去調(diào)用新版本方法(例如 StringUtil.isNotBlank(CharSequence)),

就會(huì)拋出:

NoSuchMethodError: org.apache.poi.util.StringUtil.isNotBlank(Ljava/lang/CharSequence;)Z

本質(zhì)原因:運(yùn)行時(shí)類加載順序?qū)е碌?方法簽名缺失。

場(chǎng)景二:EasyExcel 與 POI 版本不兼容

即使你只引入了 EasyExcel,一些 IDE 或父依賴(如 Spring Boot Starter)可能傳遞進(jìn)了 不兼容版本的 POI。

例如:

  • EasyExcel 4.0.3 編譯依賴 POI 4.1.2;
  • 但 Spring Boot 傳遞進(jìn)了 POI 5.2.x;
  • 運(yùn)行時(shí)會(huì)出現(xiàn)某些類或方法簽名不匹配(比如 StringUtil.isNotBlankPOIXMLDocument.close)。

本質(zhì)原因:EasyExcel 依賴的 POI 方法簽名在高版本中被修改或刪除。

三、解決方案

方案一:排除 EasyExcel 自帶的 POI,手動(dòng)指定統(tǒng)一版本(推薦)

<!--  EasyExcel 導(dǎo)出(排除內(nèi)部 POI 依賴) -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!--  手動(dòng)指定兼容版本 POI(與 EasyExcel 4.0.3 完美匹配) -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

說(shuō)明:EasyExcel 4.0.3 的源碼中基于 POI 4.1.x 版本構(gòu)建,因此與之兼容性最佳。

方案二:如果項(xiàng)目不直接使用 POI,直接移除自己引入的 POI

如果你的項(xiàng)目只通過(guò) EasyExcel 操作 Excel,沒(méi)有直接使用 POI 的 API,

那么最簡(jiǎn)單的方式是刪除多余的 POI 依賴:

<!-- 保留 EasyExcel 即可 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>4.0.3</version>
</dependency>

四、總結(jié)

問(wèn)題類型根本原因解決方式
依賴沖突項(xiàng)目中同時(shí)存在多個(gè) POI 版本排除 EasyExcel 內(nèi)部 POI,只保留一個(gè)版本
版本不兼容EasyExcel 與當(dāng)前 POI 方法簽名不同使用與 EasyExcel 匹配的 POI 版本(如 4.1.2)

最簡(jiǎn)單的經(jīng)驗(yàn)法則:

  • 只用 EasyExcel → 不要單獨(dú)引入 POI。
  • 同時(shí)用 POI + EasyExcel → 統(tǒng)一 POI 版本并排除 EasyExcel 自帶的依賴。

結(jié)語(yǔ):

NoSuchMethodError 并不是 EasyExcel 的 bug,而是依賴管理的問(wèn)題。
只要理清依賴樹(shù)、保持 POI 版本一致,就能徹底解決此類沖突。

到此這篇關(guān)于EasyExcel與Apache POI版本沖突導(dǎo)致`NoSuchMethodError`異常的解決方法的文章就介紹到這了,更多相關(guān)EasyExcel與Apache POI版本沖突內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中Object類的常用方法小結(jié)

    Java中Object類的常用方法小結(jié)

    Java?Object?類是所有類的父類,位于?java.lang?包中,本文為大家整理了一些Object類的常用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • jsp、servlet前后端交互對(duì)數(shù)據(jù)處理及展示的簡(jiǎn)單實(shí)現(xiàn)

    jsp、servlet前后端交互對(duì)數(shù)據(jù)處理及展示的簡(jiǎn)單實(shí)現(xiàn)

    Servlet和JSP是Java Web開(kāi)發(fā)中的兩個(gè)重要概念,在Servlet和JSP中前后端交互可以通過(guò)一些方式來(lái)實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于jsp、servlet前后端交互對(duì)數(shù)據(jù)處理及展示的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下
    2023-12-12
  • Spring Validation中9個(gè)數(shù)據(jù)校驗(yàn)工具使用指南

    Spring Validation中9個(gè)數(shù)據(jù)校驗(yàn)工具使用指南

    Spring Validation作為Spring生態(tài)系統(tǒng)的重要組成部分,提供了一套強(qiáng)大而靈活的數(shù)據(jù)校驗(yàn)機(jī)制,本文給大家介紹了Spring Validation中9個(gè)數(shù)據(jù)校驗(yàn)工具的使用指南,需要的朋友可以參考下
    2025-05-05
  • JavaSE多線程阻塞隊(duì)列實(shí)現(xiàn)代碼

    JavaSE多線程阻塞隊(duì)列實(shí)現(xiàn)代碼

    阻塞隊(duì)列是一種線程安全的隊(duì)列,可以用于多線程之間的數(shù)據(jù)傳遞和同步,下面這篇文章主要介紹了JavaSE多線程阻塞隊(duì)列的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12
  • 關(guān)于SHA算法原理與常用實(shí)現(xiàn)方式

    關(guān)于SHA算法原理與常用實(shí)現(xiàn)方式

    這篇文章主要介紹了關(guān)于SHA算法原理與常用實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Java FineReport報(bào)表工具導(dǎo)出EXCEL的四種方式

    Java FineReport報(bào)表工具導(dǎo)出EXCEL的四種方式

    這篇文章主要介紹了Java FineReport報(bào)表工具導(dǎo)出EXCEL的四種方式的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • springcloud feign傳輸List的坑及解決

    springcloud feign傳輸List的坑及解決

    這篇文章主要介紹了springcloud feign傳輸List的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實(shí)現(xiàn)文本編譯器

    Java實(shí)現(xiàn)文本編譯器

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)文本編譯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java數(shù)組的定義與使用

    Java數(shù)組的定義與使用

    數(shù)組是有序的元素序列,若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。本文通過(guò)代碼示例詳細(xì)介紹了Java數(shù)組的定義和使用,對(duì)學(xué)習(xí)或工作有一定的幫助,需要的小伙伴歡迎閱讀
    2023-04-04
  • Java+EasyExcel實(shí)現(xiàn)文件上傳功能

    Java+EasyExcel實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java和EasyExcel實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02

最新評(píng)論

界首市| 南汇区| 清远市| 东宁县| 二连浩特市| 桂平市| 炎陵县| 唐河县| 迁西县| 永顺县| 邯郸市| 梧州市| 塘沽区| 南江县| 讷河市| 安塞县| 巴东县| 手游| 县级市| 泰州市| 库尔勒市| 陕西省| 大安市| 荆门市| 水富县| 枣强县| 公安县| 襄樊市| 新蔡县| 新泰市| 福清市| 松潘县| 亚东县| 河曲县| 辽阳县| 阜南县| 海门市| 始兴县| 习水县| 会泽县| 类乌齐县|