最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: orgapachepoiP

网站源码admin0浏览0评论

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/P

想实现excel文件内容读取到数据库中,而且excel是存在合并单元格这种情况的,便考虑借助EasyExcel来实现

前置操作

  • 因为要使用EasyExcel,所以在pom.xml中引入EasyExcel和poi相关依赖
代码语言:javascript代码运行次数:0运行复制
<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
</dependencies>

<!-- 管理子项目中引用的依赖的版本 -->
    <dependencyManagement>
        <dependencies>
    <!--只是声明,没有导入-->
            <!-- .apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.0.0</version>
            </dependency>

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

        </dependencies>
    </dependencyManagement>

问题

运行代码时,发现报错如下

com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

原因

这个异常表明在使用阿里巴巴的 EasyExcel 库时,发生了 ExcelAnalysisException,并且其中的原因是 java.lang.NoClassDefFoundError: org/apache/poi/P。这通常是因为缺少 Apache POI 库的相关依赖引起的。

  1. 因为之前项目的pom里引入过poi-ooxml版本是4.0.0,所以直接引了过来,实际应该看easyexcel依赖中的poi-ooxml版本。
  2. 点击easyexcel依赖可以看到poi-ooxml版本是3.17

解决

要解决这个问题,需要确保项目中包含了 Apache POI 库的正确版本,正如上所述,我是从之前项目的pom里直接引入的,怀疑是poi-ooxml版本的问题

我的解决方法

修改poi-ooxml版本为easyexcel中的版本 如上原因,把poi-ooxml版本替换为3.17,再去运行项目,果然解决了

一般的解决步骤

添加 Apache POI 依赖

在项目中,确保已经添加了 Apache POI 的依赖。具体的配置方式取决于你使用的构建工具,比如 Maven 或 Gradle。

对于 Maven,在你的 pom.xml 文件中添加以下依赖:

代码语言:javascript代码运行次数:0运行复制
<dependencies>
    <!-- 其他依赖项 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>你需要的版本号</version>
    </dependency>
</dependencies>

对于 Gradle,在你的 build.gradle 文件中添加以下依赖:

代码语言:javascript代码运行次数:0运行复制
dependencies {
    // 其他依赖项
    implementation 'org.apache.poi:poi:你需要的版本号'
}

确保你选择的 Apache POI 版本与 EasyExcel 兼容

查看 EasyExcel 版本

确保你使用的 EasyExcel 版本与你添加的 Apache POI 版本兼容。 可以查看 EasyExcel 的文档或者官方说明,了解哪个版本与哪个版本的 Apache POI 最为匹配。

检查依赖冲突

有时候,项目中可能存在多个库引入了不同版本的 Apache POI,导致依赖冲突。你可以使用你的构建工具的命令来查看项目的依赖关系,以确定是否存在冲突。

对于 Maven,你可以运行以下命令:

代码语言:javascript代码运行次数:0运行复制
mvn dependency:tree

对于 Gradle,你可以运行以下命令:

代码语言:javascript代码运行次数:0运行复制
./gradlew dependencies

查看输出,检查是否有多个版本的 Apache POI 被引入


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-12-21,如有侵权请联系 cloudcommunity@tencent 删除comexcelnoclassdeffounderrorjavaapache
发布评论

评论列表(0)

  1. 暂无评论