如何将org.apache.poi的poi-ooxml从4.1.1升级到5.0.0并解决报错
报错原因
POI从5.0.0版本开始,依赖的Apache XMLbeans组件版本从3.x系列升级到了4.x系列,而XMLbeans 4.x版本直接移除了org.apache.xmlbeans.xml.stream包下的所有旧API,包括报错提示的XMLInputStream类,所以会触发类找不到的异常,对应报错信息翻译为:java: 无法访问org.apache.xmlbeans.xml.stream.XMLInputStream,找不到org.apache.xmlbeans.xml.stream.XMLInputStream的类文件。
解决方案
根据你的实际使用场景选择对应方案即可:
- 场景1:你的业务代码没有直接引用
org.apache.xmlbeans.xml.stream.XMLInputStream
这是最常见的情况,一般是项目中其他依赖引入了低版本的XMLbeans,产生了版本冲突。- 执行依赖排查命令定位低版本XMLbeans的来源:
- Maven项目执行:
mvn dependency:tree | grep xmlbeans - Gradle项目执行:
gradle dependencies | grep xmlbeans
- Maven项目执行:
- 找到低版本XMLbeans的引入依赖后,在对应依赖的声明中加入排除规则,将所有XMLbeans的版本统一为POI 5.0.0配套的4.0.0及以上版本即可。
- 执行依赖排查命令定位低版本XMLbeans的来源:
- 场景2:你的业务代码直接引用了
XMLInputStream类
旧的XMLbeans流式API已经被官方废弃移除,你需要将代码中对org.apache.xmlbeans.xml.stream.XMLInputStream的引用,替换为JDK自带的javax.xml.stream.XMLInputStream,或者适配POI 5.x提供的新XML处理API。
注意:不推荐临时手动引入低版本XMLbeans 3.x的兼容方案,虽然可以临时解决该报错,但后续大概率会出现其他类不兼容的问题。
内容的提问来源于stack exchange,提问作者lee
相关产品推荐
相关产品推荐

