使用阿里easyexcel进行导出时报错:(libharfbuzz.so.0: 无法打开共享对象文件)的处理

centos7.9系统运行Java集成easyexcel的服务时报以下错误:

com.alibaba.excel.exception.ExcelGenerateException: java.lang.UnsatisfiedLinkError: /usr/local/openjdk-17.0.9/lib/libfontmanager.so: libharfbuzz.so.0: 无法打开共享对象文件: 没有那个文件或目录

at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:65)

at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:73)

at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:50)

at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62)

原因是缺少libharfbuz库。

解决方案:

yum install -y harfbuzz

如果安装失败,可以使用阿里的镜像更新yum源:

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache fast

如果没有安装fontconfig还可能报以下错误:

com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:65)

at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:73)

at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:50)

at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:62)

解决方案:

yum install -y fontconfig

该异常通常发生在使用 EasyExcel 导出文件,与 EasyExcel 或其依赖库的版本不兼容有关。`java.lang.NoSuchFieldError: DEFAULLT` 表示代码试图访问一个不存在的字段 `DEFAULLT`,这可能是由于拼写错误或依赖库中没有定义此字段所致。 一种常见的情况是某些旧版本的 EasyExcel 依赖于特定的配置类(如 `DefaultWriteExecutor` 或其他相关类),而这些类中的常量字段名称可能在新版本中发生了更改或被移除[^1]。如果项目中存在多个不同版本的 EasyExcel 或其底层依赖(例如 Apache POI、Fastjson 等),也可能导致此类问题。 ### 解决方法 1. **检查 EasyExcel 版本** 确保使用EasyExcel 版本较新且稳定。建议使用官方推荐的最新版本,例如: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency> ``` 如果使用的是旧版本(如 2.x),升级到最新的 3.x 可能会修复这个问题[^1]。 2. **清理并重新引入依赖** 检查 Maven 或 Gradle 配置中是否存在重复的 EasyExcel 依赖,或者与其他库冲突的版本。可以尝试清除本地仓库后重新下载依赖。 - 对于 Maven 用户,执行以下命令: ```bash mvn dependency:purge-local-repository ``` 3. **检查依赖冲突** 使用 `mvn dependency:tree` 命令查看依赖树,确认是否有多个版本的 EasyExcel 或其底层依赖(如 `easyexcel-core`, `easyexcel-spring-boot-starter`)被同引入。如果有,应统一为相同版本。 4. **排查字段引用错误** 如果代码中直接引用了 `DEFAULLT` 字段,应检查是否存在拼写错误,例如是否误将 `DEFAULT` 写成了 `DEFAULLT`。如果是第三方扩展库使用了错误的字段名,则需要更新该库或联系开发者进行修复[^1]。 5. **查看日志和堆栈跟踪** 检查完整的异常堆栈信息,定位是哪个类抛出了 `NoSuchFieldError`,从而判断具体是哪一部分代码或依赖导致的问题。 6. **参考社区反馈** 在 GitHub Issues、Stack Overflow 或技术论坛上搜索类似问题,可能会发现其他人已经提供了针对性的解决方案或补丁。 ### 示例代码:基本的 EasyExcel 导出操作 ```java // 定义数据模型 public class DemoData { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private int age; // 构造函数、getter 和 setter } // 导出操作 public void exportData(String filePath) { List<DemoData> dataList = new ArrayList<>(); // 添加测试数据 dataList.add(new DemoData("张三", 25)); dataList.add(new DemoData("李四", 30)); EasyExcel.write(filePath, DemoData.class).sheet("Sheet1").doWrite(dataList); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyzcto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值