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

使用GX X EVO 3打开Excel文件时出现NoSuchMethodError错误求助

问题:调用FileExcel.Open打开XLS文件时抛出NoSuchMethodError

执行代码

&Error = &FileExcel.Open(&FileName) 

报错信息

at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.NoSuchMethodError: 'org.apache.poi.poifs.filesystem.DirectoryNode org.apache.poi.poifs.filesystem.POIFSFileSystem.getRoot()

环境配置

  • GX X EVO 3 U7
  • Ubuntu 20.04
  • Tomcat 9.0.31
  • Java版本:openjdk 11.0.17 2022-10-18

已尝试的POI版本

  • poi-3.17.jar, poi-ooxml-3.17.jar, poi-ooxml-schemas-3.17.jar
  • poi-3.8.jar, poi-ooxml-3.8.jar, poi-ooxml-schemas-3.8.jar

其他配置

使用无头模式LibreOffice,启动命令:

sudo /usr/bin/soffice --nologo --headless --nofirststartwizard --accept='socket, host=127.0.0.1,port=8100;urp;StarOffice.Service' &

已按官方文档完成配置,但问题仍存在,寻求技术支持。


解决方案

1. 清理POI版本冲突

NoSuchMethodError核心原因是类路径中存在版本不兼容或重复的POI依赖:

  • 彻底清理Tomcat项目WEB-INF/lib目录,只保留一套完整的POI相关Jar包,删除所有其他版本的冗余文件,避免类加载冲突。
  • 确保所有POI组件版本完全一致,包括poi、poi-ooxml、poi-ooxml-schemas,同时补充POI必需的依赖包:commons-codec、commons-collections4、commons-io、curvesapi、xmlbeans,缺失这些依赖也会触发异常。

2. 匹配Genexus官方适配版本

Genexus X EVO 3 U7对POI版本有明确适配要求:

  • POI 3.8与3.17之间存在API签名变更:旧版POIFSFileSystem.getRoot()返回DirectoryEntry,3.17版本返回DirectoryNode,若Genexus底层代码基于旧版编写,使用3.17会导致方法签名不匹配,反之亦然。
  • 优先使用Genexus官方提供的POI依赖包,而非自行下载第三方版本,确保版本完全适配。

3. 排除LibreOffice干扰

虽然报错来自POI,但需验证LibreOffice是否存在资源冲突:

  • 停止当前LibreOffice服务,单独通过POI尝试打开文件,若问题消失,说明两者存在资源竞争,需调整LibreOffice启动参数或隔离运行环境。

4. 检查全局类路径

  • 排查Tomcat全局类路径(如CATALINA_BASE/lib),确认不存在其他版本的POI包,避免全局Jar包覆盖项目依赖。

内容的提问来源于stack exchange,提问作者Jose Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:50:32