java错误排查——java.lang.NoClassDefFoundError

java错误排查——java.lang.NoClassDefFoundError

本文章来源于开发过程中自己碰到问题并且解决记录,如有不好,望各位大佬指正。先上错误截图
java错误排查——java.lang.NoClassDefFoundError_第1张图片

		编译后,用Okhttp3调用post请求报错

1.NoClassDefFoundError错误发生的原因以及解决颁发

在网上了解到。NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。
简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。
这里附上相关链接:如何解决NoClassDefFoundError错误

错误产生:jar版本冲突

经过一项一项的排查,我发现这次报错是源于项目jar的版本冲突。当时项目引入了腾讯SDK(发短信用)。然后原来的Okhttp3调用post请求就报错了。找不到对应的类。
这里附上Okhttp3调用post请求相关链接:Okhttp3基本使用
原因:pom引入了okhttp会自动依赖对应版本的okio,不用再在pom.xml中指定okio版本号。
而腾讯SDK(tencentcloud-sdk-java)中内嵌了okio,Okhttp3。因此在调用的时候会照成版本冲突的问题(原okhttp中的okio,与腾讯SDK中的okio)

解决方法:排出依赖

在引入SDK的时候排除okio依赖。如下图
java错误排查——java.lang.NoClassDefFoundError_第2张图片
至此,这次问题就解决了。

你可能感兴趣的:(java,开发语言,后端)