You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POI从4升级至5.2.1时遭遇NoClassDefFoundError问题求助

Apache POI 4升级到5.2.1后出现NoClassDefFoundError的解决建议

问题描述

升级Apache POI从4.x版本到5.2.1后,抛出以下类未找到错误:

java.lang.NoClassDefFoundError: org/apache/xmlbeans/impl/schema/DocumentFactory
    at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook.<clinit>(CTWorkbook.java:22)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:475)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:232)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:226)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:214)
    at com.leanapps.businesslayer.ejb.importparticipants.helper.ImportParticipantsHelper.determineExcelWorkbook(ImportParticipantsHelper.java:307)
    at com.leanapp

当前使用的Maven POM配置:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-lite</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-lite</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-full</artifactId>
    <version>${poi.version}</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-lite</artifactId>
        </exclusion>
    </exclusions>
</dependency>

当前使用xmlbeans版本为3.1.0,预期正常下载Excel文件,实际出现上述错误。

解决建议

1. 修正依赖冗余与错误排除配置

  • 无需同时引入poi-ooxml和poi-ooxml-full,二者选其一即可:poi-ooxml-full包含完整的OOXML schema定义,poi-ooxml默认使用轻量版poi-ooxml-lite。
  • 移除对poi-ooxml-schemas和poi-ooxml-lite的排除配置:CTWorkbook等类依赖这些schema定义,排除后会导致类加载失败。

2. 匹配POI 5.2.1兼容的xmlbeans版本

POI 5.2.1官方要求的xmlbeans版本为5.1.0,当前使用的3.1.0版本过低,存在兼容性问题,org/apache/xmlbeans/impl/schema/DocumentFactory在低版本中可能不存在或包结构变更。

3. 优化后的POM配置示例

<!-- 核心POI依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.1</version>
    <scope>provided</scope>
</dependency>

<!-- 完整OOXML支持依赖 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-full</artifactId>
    <version>5.2.1</version>
    <scope>provided</scope>
</dependency>

<!-- 明确指定兼容的xmlbeans版本 -->
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>5.1.0</version>
    <scope>provided</scope>
</dependency>

4. 验证依赖树

执行mvn dependency:tree命令,检查是否存在xmlbeans版本冲突,确保最终依赖的xmlbeans版本为5.1.0,无低版本xmlbeans被引入。

5. 检查运行环境依赖

由于依赖scope设置为provided,需确认应用服务器等运行环境提供的xmlbeans版本是否为5.1.0;若容器提供旧版本,可将scope改为compile,或在容器中替换为兼容版本。

内容的提问来源于stack exchange,提问作者Deviprasanna Yepuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:10:37