java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

来源:互联网 发布:计算机视觉 知乎 编辑:程序博客网 时间:2024/04/29 23:23

         从昨天开始有一个问题令我挺是郁闷。我用tomcat与tomcat plugin开发一个上传的小程序(上传组件用的是:common upload)。当然刚开始为了能够调试都是在eclipse里通过tomcat plugin启动的tomcat , 运行程序后报错误:java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream。很显然是common-io.jar这个包没加到classpath中(事实上我已经加了)。在网上找了很多贴子,都说是common-io.jar这个包没有加,这下子我就纳闷了,为什么就不行呢?

       于是,我开始怀疑是JAR的版本不兼容(因为我每次遇到这种稀其古怪的问题时最后发现都是版本不兼容)。接着就开始更换commons-io.jar包的版本。还是不行。

       实在搞不清楚为什么了,向同事请教,他们看后也不知道为什么,不过,向我提供了一个很有用的调试方法。他们怀疑与eclipse有关,叫我尽量让调试环境干净些。于是,我不在eclipse里启动tomcat, 只是直接在外部启动tomcat ,结果一切OK!

       这下令我更纳闷了,为什么在eclipse里启动tomcat就会报类没有加载的错误了?这个问题弄得很烦,但也把我的脾气也搞来了,我发誓非要解决它不可。

       这么多路走不通,再从哪里开始了? 我开始怀疑是tomcat plugin的问题,于是,我把它换成WTP plugin 。结果,一切OK !

       为什么单独跑可以,在WTP环境里跑也可以,偏偏移到tomcat plugin里跑就不行了呢?于是,接着我开始怀疑是我操作系统的问题。我找同事借用了一下他们的机器,在他们的机器里在WTP 及tomcat plugin环境里也居然一切OK !

        这时候,同事们都说是我的机器环境有问题。可是我的机器环境就有什么问题了。在他们的机器上跑程序时也是从我这里克隆的软件啊。于是,我开始反复比较同事机器与我机器上配置tomcat plugin环境在哪儿不同。最后,再经过努力,谜底终于揭开了:

           在上图中,千万不要将cssweb前的勾勾上(因为我调试的是另外一个工程,这样导致eclipse加载的始终是cssweb工程里的JAR,于是,也就出现了找不到类的问题)

          可以说,在调试这个问题的过程中极大的锻炼了我的心理素质,程序员的好脾气就是这样炼出来的吧!!!

 
原创粉丝点击