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

Apache POI XSSFWorkbook运行时NoClassDefFoundError问题求助

POI XSSFWorkbook运行时NoClassDefFoundError问题排查与解决

问题背景

项目路径结构

APP 
  /----WEB-INF
       /-----lib 
               /----poi-5.2.5.jar
               /----poi-ooxml-5.2.5.jar
               /----poi-ooxml-schemas-4.1.2.jar
               /----xmlbeans-5.1.1.jar
               /----commons-collections4-4.5.0-M2.jar

核心代码

Servlet中创建Excel的代码:

Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Datos Mantenimiento");

报错信息

编译正常,但运行时抛出异常:

excepción
javax.servlet.ServletException: La ejecución del Servlet lanzó una excepción\n\torg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.xssf.usermodel.XSSFWorkbook
    Servlets.DocumentCreator.exportarExcel(DocumentCreator.java:123)
    Servlets.DocumentCreator.exportarDocumento(DocumentCreator.java:111)

完整堆栈信息

6-Jun-2024 14:42:50.631 GRAVE [http-nio-8080-exec-9] org.apache.catalina.core.StandardWrapperValve.invoke El Servlet.service() para el servlet [DocumentCreator] en el contexto con ruta [/intranet] lanzó la excepción [La ejecución del Servlet lanzó una excepción] con causa raíz
java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
    at org.apache.poi.ooxml.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:56)
    at Servlets.DocumentCreator.exportarExcel(DocumentCreator.java:123)
    at Servlets.DocumentCreator.exportarDocumento(DocumentCreator.java:111)
    at Servlets.DocumentCreator.service(DocumentCreator.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:623)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:750)

问题原因

  1. 直接根因:从堆栈信息可见java.lang.ClassNotFoundException: org.apache.logging.log4j.LogManager,说明项目缺少POI 5.x依赖的Log4j 2日志框架jar包。POI 5.x版本起默认使用Log4j 2作为日志实现,缺失该依赖会导致初始化POIXMLDocumentPart类失败,最终引发XSSFWorkbook初始化错误。
  2. 潜在风险:poi-ooxml-schemas-4.1.2.jar与POI主版本5.2.5不匹配,虽不是当前报错的直接原因,但后续可能引发兼容性问题。

解决步骤

  1. 补充Log4j 2依赖:
    • 下载与POI 5.2.5兼容的log4j-api-2.17.1.jar和log4j-core-2.17.1.jar,将其放入WEB-INF/lib目录。
  2. 统一POI组件版本:
    • 删除poi-ooxml-schemas-4.1.2.jar,下载同版本的poi-ooxml-schemas-5.2.5.jar替换,确保所有POI相关组件版本一致。
  3. 验证其他依赖:
    • 检查是否缺少commons-codec-1.15.jar、commons-math3-3.6.1.jar等POI 5.2.5依赖jar包,若缺失需补充对应版本。
  4. 重启Tomcat:
    • 重启服务器后重新测试Servlet功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:05:54