POI导出excel提示ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils

 

POI导出excel提示ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils


这是我自己的代码提示的异常信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils
at org.apache.poi.hssf.usermodel.HSSFWorkbook.addPicture(HSSFWorkbook.java:1798)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 4 more


想用poi导出图片,jxl只支持png格式,所以考虑用poi。在测试的时候提示这个异常。


经过测试,我使用的是poi3.15版本,运行就会报错,换成poi3.8版本就没有问题。
首先解决ClassNotFoundException问题,很显然是缺少jar包。
导入相关jar包:
<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.15</version>
</dependency>
<dependency>
   <groupId>org.apache.directory.studio</groupId>
   <artifactId>org.apache.commons.codec</artifactId>
   <version>1.8</version>
</dependency>
问题依然存在。可以看到我的jar包已经导入成功了,但是还是找不到class.(maven管理的jar包在class  path 里面可以看到),实在不确定,可以在类里面使用import进行测试。
如:import org.apache.commons.codec.digest.DigestUtils;会提示报错,找不到对应的jar里面。
因此推断问题在jar包上。我在mvnrepository的网站上只找到1.8版本的org.apache.commons.codec-1.8.jar,但是搜索DigestUtils的时候在apache的官网发现有个1.10的Class,如下: http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html ,但是找不到1.10的jar包,只好使用源码进行测试,源码下载 :http://commons.apache.org/proper/commons-codec/download_codec.cgi
把源码拷贝到项目中,运行导出代码,excel导出成功。问题解决。
原因为版本问题。poi3.15要使用org.apache.commons.codec-1.10.jar


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值