升级XMLBeans至4.0.0后调用open抛出NoSuchMethodError问题求助
解决XMLBeans 4.0.0升级后出现的NoSuchMethodError问题
这个问题我之前也碰到过,核心原因是XMLBeans 4.0.0的API变更与你当前使用的POI版本不兼容,具体分析和解决方案如下:
问题根源
XMLBeans 4.0.0对XmlOptions类做了破坏性API变更:原本无返回值的put(Object)方法被移除,替换成了带返回值的重载方法put(Object...)。而你项目中使用的POI版本(从堆栈里的SharedStringsTable.java:94来看,应该是POI 5.0.0以下的版本)仍然依赖XMLBeans 3.x中的旧版put方法,导致运行时找不到对应方法,抛出NoSuchMethodError。
解决方案
你有两个可行的方向来解决这个问题:
方案1:升级POI到兼容XMLBeans 4.x的版本
Apache POI从5.0.0版本开始,正式将依赖的XMLBeans版本升级到4.x,完全适配XMLBeans 4.0.0的API变更。你只需要把项目中的POI相关依赖(比如poi、poi-ooxml等)升级到5.0.0或更高版本即可。
举个Maven依赖的例子:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> <!-- 或更高稳定版本 --> </dependency>
方案2:回退XMLBeans版本到3.1.0
如果你暂时不想升级POI,可以将XMLBeans的版本回退到3.1.0,确保和当前POI版本的依赖完全匹配,这样就能恢复正常调用。
额外排查步骤
升级或回退后,建议检查项目的依赖树,确认没有依赖冲突:
- Maven用户可以执行命令:
mvn dependency:tree - Gradle用户可以执行命令:
./gradlew dependencies
确保没有其他依赖偷偷引入了不兼容的XMLBeans版本。
内容的提问来源于stack exchange,提问作者dotmindlabs




