You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用poi-tl时出现NoClassDefFoundError: org/apache/poi/logging/PoiLogManager错误的解决求助

使用poi-tl时出现NoClassDefFoundError: org/apache/poi/logging/PoiLogManager错误的解决求助

嗨,我来帮你分析并解决这个问题!这个报错的核心原因是POI相关组件版本不兼容,从你的依赖配置里就能找到问题所在:

你配置的poipoi-ooxml都是5.2.2版本,但poi-ooxml-schemas却用了4.1.2版本——不同版本的POI组件之间存在API差异,org.apache.poi.logging.PoiLogManager这个类在POI 5.x中是正常存在的,但旧版本的poi-ooxml-schemas会干扰类加载逻辑,或者依赖了旧版本的POI核心类,最终导致找不到这个类。

具体解决方案:

  1. 统一POI组件版本
    poi-ooxml-schemas的版本改成和其他POI依赖一致的5.2.2,修改后的依赖配置如下:
<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.12.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>5.2.2</version>
</dependency>
  1. 清理并重新下载依赖
    执行以下Maven命令,彻底清理旧的依赖缓存并重新构建项目:
mvn clean install -U
  1. 排查潜在依赖冲突(可选)
    如果修改版本后问题仍存在,可以用Maven依赖树命令检查是否有其他第三方依赖偷偷引入了旧版本的POI组件:
mvn dependency:tree

找到冲突的旧版本POI依赖后,在对应的依赖中添加<exclusions>标签排除掉旧组件,示例如下:

<dependency>
    <!-- 这里替换成实际引入旧POI的依赖 -->
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>xxx</version>
    <exclusions>
        <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>

补充小提示

其实在POI 5.x版本中,poi-ooxml已经包含了必要的schema类,如果你没有直接使用poi-ooxml-schemas的需求,也可以尝试直接移除这个依赖,说不定能简化配置哦~


内容来源于stack exchange

火山引擎 最新活动