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

部署Tomcat项目时遭遇Apache POI NoClassDefFoundError问题求助

Troubleshooting Tomcat Deployment Error: NoClassDefFoundError for Apache POI's InvalidFormatException

Hey there, let's break down this issue you're hitting. The NoClassDefFoundError here tells us that even though your build works fine (so the class was present during compilation), Tomcat can't find the InvalidFormatException class at runtime. This almost always boils down to a mismatch between your build classpath and the runtime classpath in Tomcat.

First, let's confirm the core issue from the error stack trace:

Caused by: java.lang.NoClassDefFoundError: org/apache/poi/openxml4j/exceptions/InvalidFormatException
...
Caused by: java.lang.ClassNotFoundException: org.apache.poi.openxml4j.exceptions.InvalidFormatException

This class belongs to Apache POI's OOXML module, so let's walk through the most likely fixes step by step:

1. Verify Your WAR Package Includes All Required JARs

The most common culprit is that your POI-related JARs aren't being packaged into your WAR file's WEB-INF/lib directory. Even if they're in your IDE's build path, they won't be available to Tomcat unless they live in this folder.

  • Check your WAR: Unzip your deployed WAR file (or the one generated by your build) and look inside WEB-INF/lib. Confirm you see all these POI-related JARs:
    • poi-3.17.jar
    • poi-ooxml-3.17.jar
    • poi-ooxml-schemas-3.17.jar
    • xmlbeans-2.6.0.jar
    • curvesapi-1.04.jar

If any are missing, adjust your IDE's deployment settings:

  • In Eclipse: Go to Project Properties > Deployment Assembly, and add the missing JARs to the list of artifacts to deploy.
  • In IntelliJ: Go to File > Project Structure > Artifacts, ensure the JARs are included in the WAR's WEB-INF/lib folder.

2. Confirm the poi-ooxml JAR Contains the Missing Class

If poi-ooxml-3.17.jar is present in WEB-INF/lib, double-check that it actually contains the InvalidFormatException class. Run this command in your terminal:

jar tf poi-ooxml-3.17.jar | grep InvalidFormatException

If this returns no results, your JAR file might be corrupted or you downloaded the wrong version. Re-download the POI OOXML JAR from the official Apache POI repository and replace it in your build path.

3. Check for Tomcat Classpath Conflicts

Sometimes, Tomcat's global lib directory (usually TOMCAT_HOME/lib) might have older versions of POI or OpenXML4J JARs that conflict with your project's dependencies.

  • Navigate to your Tomcat installation's lib folder and look for any JARs starting with poi- or openxml4j-.
  • If you find any, move them to a backup location (don't delete them immediately) and redeploy your project. Tomcat will then use the JARs from your project's WEB-INF/lib instead.

4. Validate Your Build Tool Configuration (If Using Maven/Gradle)

If you're using a build tool like Maven or Gradle, make sure your POI dependencies are set to the correct scope so they're included in the WAR:

Maven Example:

Ensure your pom.xml has these dependencies (the default compile scope will ensure they're packaged):

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

Running mvn clean package will automatically pull in all required transitive dependencies (like xmlbeans and curvesapi) and package them into your WAR.

Gradle Example:

Use the implementation scope in your build.gradle:

implementation 'org.apache.poi:poi:3.17'
implementation 'org.apache.poi:poi-ooxml:3.17'

This ensures the JARs are included in the final WAR file.

Final Quick Checklist

  • All POI-related JARs are present in WEB-INF/lib of your WAR
  • poi-ooxml-3.17.jar contains the InvalidFormatException class
  • No conflicting POI JARs in Tomcat's global lib directory
  • Build tool dependencies are configured to include JARs in the WAR

Start with checking the WAR's WEB-INF/lib directory—this is where most people hit this issue. If that's set correctly, move on to the other steps.

内容的提问来源于stack exchange,提问作者Tristan Le Gacque

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:52