IntelliJ导入Apache POI运行报NoClassDefFoundError如何解决
问题原因
- 编译阶段IDE仅校验代码中直接引用的POI核心API类是否存在,因此不会触发报错
- 你代码中使用的
XSSFWorkbook、XSSFSheet等属于处理.xlsx格式的OOXML规范工具类,这部分功能依赖xmlbeans等POI的间接依赖包。你仅导入了POI核心jar包,未将这部分间接依赖加入运行时类路径,就会触发找不到类的异常
异常信息中提示缺失的
org.apache.xmlbeans.XmlObject就是xmlbeans依赖包中的核心类
你的代码逻辑本身不存在错误,补全缺失的依赖后即可正常执行。
解决方案
方案1:使用Maven/Gradle构建工具(推荐)
构建工具会自动拉取POI对应的所有间接依赖,无需手动处理依赖缺失问题。
以常用的POI 5.2.5版本为例:
如果使用Maven,在pom.xml的dependencies节点中添加如下配置:
<!-- 处理.xls格式的核心依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.5</version> </dependency> <!-- 处理.xlsx格式的依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency>
如果使用Gradle,在build.gradle的dependencies代码块中添加如下配置:
implementation 'org.apache.poi:poi:5.2.5' implementation 'org.apache.poi:poi-ooxml:5.2.5'
刷新依赖后重新运行项目即可。
方案2:手动导入所有依赖包
如果选择手动导入jar包,需要将POI官方发布包中以下目录的所有jar包都加入项目的依赖范围:
- 根目录下的poi、poi-ooxml相关核心jar包
ooxml-lib目录下的所有jar包(xmlbeans依赖就放在这个目录下)lib目录下的所有公共依赖jar包
导入完成后需要在IDEA的项目结构设置中,确认所有导入的jar包都被勾选为「运行时可用」,之后重新运行项目即可。
内容的提问来源于stack exchange,提问作者Matteo Pagliarello
相关产品推荐
相关产品推荐

