Java版Excel转XML程序遇NoSuchMethodError问题求助
解决Java.lang.NoSuchMethodError: XmlOptions.setDisallowDocTypeDeclaration的问题
问题根源
你遇到的错误是依赖版本不兼容导致的:
- Apache POI 4.0.1 官方配套的 xmlbeans 版本为 2.6.0,该版本的
XmlOptions类中不存在setDisallowDocTypeDeclaration方法 - 你引入的 xmlbeans 5.1.1 是高版本,虽然该方法在 xmlbeans 3.0+中新增,但 POI 4.0.1 的代码基于旧版 xmlbeans 编写,方法调用签名不匹配,触发了
NoSuchMethodError
可行解决方案
方案1:降级xmlbeans到POI兼容版本
将 xmlbeans 版本改为 2.6.0(POI 4.0.1 官方推荐的配套版本),彻底解决依赖冲突:
- Maven 配置修改:
<dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.6.0</version> </dependency>
- Gradle 配置修改:
implementation 'org.apache.xmlbeans:xmlbeans:2.6.0'
方案2:升级POI以适配高版本xmlbeans
若想保留 xmlbeans 5.x,需将 POI 升级到 5.2.3 及以上版本(POI 5.x 开始支持 xmlbeans 3.x+):
- Maven 配置示例:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency>
方案3:清理冗余依赖
通过IDEA排查并移除冲突依赖:
- 打开
File > Project Structure > Libraries - 检查是否存在多个版本的 xmlbeans
- 删除多余版本,仅保留与POI匹配的那一个
额外提示
你的Java代码中生成XML的逻辑基于JDK自带的javax.xml和org.w3c.domAPI,这部分无需依赖xmlbeans,xmlbeans仅作为POI读取XLSX文件的底层依赖,只要保证POI与xmlbeans版本匹配即可正常运行。
内容的提问来源于stack exchange,提问作者peter griffin
相关产品推荐
相关产品推荐

