No such Method 或者 No such Class 解决并分析

问题

开发一个小功能,遇到了No such method ,由于没有源码,一直觉得拦截器的问题致使404,单步调试过程当中发现只要运行StringUtils.substringsBetween 这段代码就会有问题。
好奇心趋势一直调试这个问题,怀疑是否是像上次同样JDK版本的问题致使的?java

查找过程

后来确认同事也是用的JDK1.8版本,并且这个方法也不是原生的,咨询同事原来是由于包冲突的问题致使。框架

修复问题

StringUtils 是commons-lang下面的一个包,而用这个包的地方不少,很容易出现版本冲突的问题。这时候就要想办法解决包冲突,问题解决。spa

为何线上没有问题,线下调试会出现问题?

这是一个值得深层次思考的问题,调试

classloader加载类有几种方式:

  1. 使用Bootstrap Classloader来加载jdk或者jre的类。负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
  2. 使用Extension Classloader来加载,你能够把须要加载的jar都扔到%JRE_HOME%/lib/ext下面,这个目录下的jar包会在Bootstrap Classloader工做完后由Extension Classloader来加载。很是方便,很是省心。:)
  3. App ClassLoader 负责加载当前java应用的classpath中的全部类。
  4. 关于自定义ClassLoader

而咱们公司采用的SOA框架是自定义ClassLoader,引入jar包按照字母顺序来加载,因此会出现某个jar 依赖的低版本的jar包先行加载到classLoader中,致使出现No such method 或者 No such Classssl

相关文章
相关标签/搜索