You need to enable JavaScript to run this app. 升级POI引入Apache官方jar包后出现CTFont.addNewFamily方法不存在报错
优惠活动
大模型
产品
解决方案
定价
更多

升级POI引入Apache官方jar包后出现CTFont.addNewFamily方法不存在报错

报错核心根因

这个java.lang.NoSuchMethodError完全是类路径下的jar版本冲突导致的,和你手动引入的POI配套jar是否存在没有关系。
JVM加载类的规则是按类路径顺序,优先加载搜索路径里第一个遇到的同名类:哪怕你把带CTFont.addNewFamily()方法的正确版本jar放进了依赖路径,只要排序更靠前的位置存在一个旧版本的同名类包,实际被加载到内存的永远是旧版本的类,自然找不到高版本里才新增的方法。你在IDE里能正常访问类,只是IDE的类索引扫到了正确的jar,但运行时的类加载顺序完全不受IDE索引逻辑控制。

具体解决操作
  • 全量扫描项目所有依赖来源:包括手动导入的本地jar、Maven/Gradle传递引入的依赖、打包输出目录下的lib、甚至应用服务器自带的共享类库,把所有包含org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont类的jar全部排查出来
  • 剔除所有不匹配的旧版本包:比如高版本POI(4.1.0+)对应的poi-ooxml-full包替换了旧的ooxml-schemas-1.x.jar,这类旧包本身就没有addNewFamily方法,只要它在类路径里,不管你放的正确版本jar位置在哪,都会触发这个报错
  • 不要零散手动从官网下载POI相关jar凑依赖,直接用构建工具引入和你升级的POI版本完全对齐的依赖组合,严格匹配官方要求的版本对应关系,不要跨大版本混引不同版本的POI、ooxml-schemas、xmlbeans包
  • 清理本地所有构建缓存:把项目编译输出目录、本地仓库的旧依赖缓存全部清掉,重新执行依赖拉取和打包,避免旧的类缓存残留导致运行时仍加载旧类
  • 启动时添加类加载打印参数,确认实际运行时加载到的CTFont类到底来自哪个jar,精准定位冲突的包位置即可解决问题

内容的提问来源于stack exchange,提问作者Bhavik Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 03:57:00