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

AEM 6.5.9服务包升级后Apache Poi调用createWorkbook报NoClassDefFoundError

AEM 6.5.9升级后Apache POI NoClassDefFoundError解决方案

核心根因

AEM 6.5.9 默认预置的commons-compress包版本低于1.17,而你使用的Apache POI版本依赖commons-compress >=1.17版本中的org/apache/commons/compress/utils/InputStreamStatistics类,OSGi类加载机制下优先加载AEM系统预置的低版本包,导致类缺失。

排查思路与解决方案

  • 依赖版本冲突核实
    登录AEM系统控制台/system/console/depfinder,搜索org.apache.commons.compress.utils.InputStreamStatistics,确认该类是否存在、所属的bundle版本号,同时搜索你部署的POI关联bundle,检查其Import-Package配置中org.apache.commons.compress.utils的版本要求。
  • 调整Maven依赖排除冲突
    在pom文件中显式排除Uber Jar和POI传递的低版本commons-compress,同时引入匹配POI版本要求的commons-compress依赖:
    <!-- 显式引入符合POI要求的commons-compress版本 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.21</version> <!-- 可根据POI版本要求调整为对应最低兼容版本 -->
    </dependency>
    <!-- Apache POI依赖配置 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>你当前使用的POI版本号</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>你当前使用的POI版本号</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-compress</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  • 配置OSGi bundle类加载优先级
    在maven-bundle-plugin的配置中添加嵌入指令,将commons-compress包内嵌到你的项目bundle中,同时配置禁止导入外部的compress工具类,优先使用内部嵌入版本:
    <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
            <instructions>
                <Embed-Dependency>commons-compress;inline=true</Embed-Dependency>
                <Import-Package>
                    !org.apache.commons.compress.utils.*,
                    *
                </Import-Package>
            </instructions>
        </configuration>
    </plugin>
    
  • 全局替代方案
    如果项目多模块都依赖POI相关功能,可直接在AEM实例中单独安装高版本commons-compress的OSGi bundle,上传至/system/console/bundles并启动,该方案可一次性解决全实例的类缺失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 01:24:03