背景
最近在使用Easyexcel做导出Excel,发布到Weblogic上报错信息如下:
com.alibaba.excel.exception.ExcelGenerateException: Can not close IO
at com.alibaba.excel.context.WriteContextImpl.throwCanNotCloseIo(WriteContextImpl.java:390)
at com.alibaba.excel.context.WriteContextImpl.finish(WriteContextImpl.java:352)
at com.alibaba.excel.write.ExcelBuilderImpl.finish(ExcelBuilderImpl.java:106)
at com.alibaba.excel.ExcelWriter.finish(ExcelWriter.java:298)
at com.alibaba.excel.write.builder.ExcelWriterSheetBuilder.doWrite(ExcelWriterSheetBuilder.java:135)
Truncated. see log file for complete stacktrace
Caused By: java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.ooxml.POIXMLTypeLoader
Easyexcel依赖如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
解决方案
经过排查发现是Easyexcel在Webloigc上运行时,找不到poi-ooxml.jar。经过尝试发现是poi.jar、poi-ooxml.jar、poi-ooxml-schemas.jar默认的版本太高导致,easyexcel 3.0.5版本使用的是4.1.2的poi包。最终经过不多尝试,将poi.jar、poi-ooxml.jar、poi-ooxml-schemas.jar的版本修改为3.17解决。
完整依赖如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>