zoukankan      html  css  js  c++  java
  • no such method error 的原因、解决方法和预防

    一、原因

    classloader加载的类里找不到对应的方法,要么是没有对应的方法函数,要么是由于包冲突,引入了错误的包,加载了错误的类。

    如果是第一种可以通过查看源码或者jad命令/工具(jd-gui)反编译jar看一下。

    image

    这个时候将会 no such method method3 exception,在compile的时候,没有问题。在method3被user1调用的时候,类加载时候,

    class loader的时候会load xml-beans-3.1.0.jar,load了错误了类,自然找不到method3。


    二、解决思路:

    1)首先通过shade-pom.xml打包,然后通过下面的命令查看一下是否引入了对应的包

    mvn dependency:list -f shaded-pom.xml -DskipTests -Dmaven.javadoc.skip=true -DreleaseVersion=xxxx | grep "xmlbean"


    2)确认引入的版本

    mvn dependency:tree -Dincludes=org.apache.xmlbeans

    image

    然后反编译对应版本,查看对应类的方法有哪些。


    3)解决方法:

    保证 a和b 使用一样的xml-beans版本,或者,通过exclusions标签切断依赖的传递性, 控制end common lib中引入的xml-beans的版本。

    https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html


    三、怎么预防在类加载阶段的错误

    如果是没有这个方法,编译就通不过。编译通过,在真正使用的时候出错。这就需要对code写好充分的unit test case,

    并用testng framework ci工具,把unit test case组织成测试集,每次code change, 触发对应的测试集进行回归测试。


    四、类加载相关的其他错误参照

    https://fredal.xin/classloader-error

  • 相关阅读:
    centOS和windows7双系统下重装windows后恢复centOS引导
    第一天
    Spring初学
    myBatis-一级缓存与二级缓存
    myBatis-类型关联
    myBatis-智能标签
    myBati初学
    myBati初学
    博客系统开发
    Y2分班考试 笔试题总结
  • 原文地址:https://www.cnblogs.com/gracejiang/p/15272139.html
Copyright © 2011-2022 走看看