在Windows开发时完全没问题。
报错的代码
EasyExcel.write(out).head(head).sheet("第1页").doWrite((Collection<?>) null);
原因
EasyExcel 是一个基于 Java 的开源 Excel 操作库,它需要依赖字体库来支持 Excel 文本样式等功能。在 Linux 系统中,如果没有安装指定的字体库,使用 EasyExcel 时就会出现空指针异常。
EasyExcel报错,是由于缺失Fontconfig 。
Fontconfig 是一个用于管理和渲染字体的库,它为操作系统提供了一致的字体接口。在 Linux 系统中,很多应用程序都依赖 Fontconfig 来实现字体渲染功能。
解决
重新编写Dockerfile,制作镜像时就下载好字体,这里可能等待时间比较久。
FROM openjdk:8-jdk-alpine
WORKDIR /opt/apps/gateway/logs/
ADD ./erp-0.0.1-SNAPSHOT.jar /App/
EXPOSE 48080
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* && mkfontscale && mkfontdir && fc-cache
ENTRYPOINT ["java","-Xmx2048m","-jar"]
CMD ["/App/erp-0.0.1-SNAPSHOT.jar"]
再次访问,完美解决。
命令解释
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* && mkfontscale && mkfontdir && fc-cache
这个命令是在 Docker 镜像中安装 DejaVu 字体库并将 Alpine Linux 的软件源替换为阿里云镜像,以便提高软件下载速度。
将 Alpine Linux 的软件源替换为阿里云镜像:sed -i ‘s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g’ /etc/apk/repositories
安装 DejaVu 字体库和 Fontconfig:apk add --update ttf-dejavu fontconfig
删除安装包缓存:rm -rf /var/cache/apk/*
生成字体索引文件:mkfontscale && mkfontdir
更新字体缓存:fc-cache