SSM文件上传出现 java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils错误的一种排错办法

今天在做文件上传时遇到一个很诡异的问题:eclipse编译通过,Tomcat顺利启动未报错,但是选择文件点击上传就会出现服务器500错误:

严重: Servlet.service() for servlet [DispatcherServlet] in context with path [/这里是项目名] threw exception [Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils] with root cause
java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils

百度了一下,说是缺commons-io-2.5.jar导致,问题是我项目的lib里有这个包的,我的版本还是很新的2.6。

看了下我的commons-fileupload-1.3.3,版本是1.3,首先怀疑是不是io的2.6版本过高导致1.3的upload包用不了。

故下载了commons-io-2.5.jar、commons-io-2.4.jar依次导入尝试,发现依然不行。

重新编译项目,clean服务器,重启服务器,依然不行。

甚至我把服务器删除了换了一个服务器,也还是不行。

这种时候,我仔细检查了我的jar包的build path,都有的,不存在没有add to build path的情况。

最后,我看了看我的commons-io-2.5和commons-fileupload.1.3.3这两个jar包的位置。

由于项目是后面需要添加文件上传的功能,为了防止jar包冲突我在WEB-INF下新建了一个叫jar的文件夹,

commons-fileupload-1.3.3.jar以及其他文件上传的jar就放在jar这个文件夹里。没有和commons-io-2.5.jar放在lib文件夹里。

遂将jar文件夹里的jar包移动到lib目录下,重新add to build path,然后重启服务器,不报错了。

个人推测:commons-io-2.5这个jar包内的代码在引用其余文件上传的jar包时,默认使用的同一个目录下的jar,当位于两个不同的目录时就出现了这种报错。

因此,当确信项目里确实引入了文件上传所需的所有jar包依然报这个错误时,可以考虑一下是否是jar包没有在同一个目录下,尝试将他们放到同一个目录下,重新add to build path试试,也许会有效果。

--------end---------------

发布了109 篇原创文章 · 获赞 34 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/shuaicenglou3032/article/details/102907717