问题:
遇到一个问题,报NoClassDefFoundError,如下图:
NoClassDefFoundError和ClassNotFoundException区别
我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。
https://blog.csdn.net/qq_28483283/article/details/78404984
排查问题:
- 项目可以正常部署且基本功能正常使用,只在调用webservice这块时报错,这也验证了这个错误发生在运行时,看了下lib目录下jar包也存在
- 看了下对应的jar包,也包含那个类
- 本地运行这个方法不会报错,在服务器上报错,又联想到发版是增量发版,依赖jar包一般不会删除的,所以对比了一下本地和服务器上的依赖jar包,果然服务器上的jar包比本地要多十几个,把服务器上的jar包完全替换成本地的jar包,就解决问题了。对比服务器上多出的jar包