POI 3.8升级至4.1.2;报NoSuchFieldError:LFH_SIG

1.下载jar包

下载地址:https://poi.apache.org/download.html#POI-4.1.2
在这里插入图片描述
在这里插入图片描述

2.放入项目中,删除老的jar包

在这里插入图片描述

3.解决报错

替换上图6个jar包完会报两种错,一种代码直接报错,一种调用原来功能报错

  • 代码直接报错解决方法(部分)
报错 替换 注释
HSSFCellStyle.ALIGN_CENTER HorizontalAlignment.CENTER 居中
Cell.CELL_TYPE_NUMERIC CellType.NUMERIC 类型对应的值:0
Cell.CELL_TYPE_STRING CellType.STRING 类型对应的值:1
Cell.CELL_TYPE_FORMULA CellType.FORMULA 类型对应的值:2
Cell.CELL_TYPE_BLANK CellType.BLANK 类型对应的值:3
Cell.CELL_TYPE_BOOLEAN CellType.BOOLEAN 类型对应的值:4
Cell.CELL_TYPE_ERROR CellType.ERROR 类型对应的值:5
  • 调用原来功能报错
    因为老的poi3.8还需要多个apache-comons-xxx.jar的jar包支持,所以要替换apache-commons的jar包来与目标版本4.1.2相对应,可以在https://mvnrepository.com/查找对应的jar包
    这步骤比较麻烦,但基本可以凭报错信息中,根据类的包名找到需要下载的jar包,如:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述其他commons-xxx.jar包替换类似
    在这里插入图片描述

4.奇葩报错:NoSuchFieldError:LFH_SIG

  • 有些不知道原来的jar包是哪个,虽然下载对应的版本了,但是没删除原来的jar包,也会报错,比如:
    在这里插入图片描述
    可能你已经下载了commons-compress正确的jar包,但是还报错,这个时候,怎么找原来老版本的commons-compress的jar包显得至关重要;
    怎么办呢?
    (1)往下看找到最近的报错地方ZipArchivlInputStream
    (2)利用eclipse的CTRL+T功能
    此功能是搜索类,不同于CTRL+R只能搜索项目中的我们自己写的类,CTRL+T还能搜索jar包中的类,选中类,会提示来自哪个jar包
    在这里插入图片描述
    在输入org.apache.commons.compress.archiver时,查看提示的类中有一个ArchiverFactory类,此类对应的jar包不是commons-compress-1.20.jar;而是apache-jakarta-commons-compress.jar;尝试删除apache-jakarta-commons-compress.jar,删除后问题解决
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章