美文网首页
Mac Idea 解决NoSuchMethodError

Mac Idea 解决NoSuchMethodError

作者: 鹅鹅鹅_ | 来源:发表于2020-03-21 16:59 被阅读0次

    这次真的是学习了,遇到了NoSuchMethodError的错误。记录一下解决的过程。

    .[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/sqs] threw exception [Filter execution threw an exception] with root cause
    java.lang.NoSuchMethodError: org.codehaus.plexus.ContainerConfiguration.getLifecycleHandlerManager()Lorg/codehaus/plexus/lifecycle/LifecycleHandlerManager;
     at org.unidal.lookup.ContainerLoader.preConstruction(ContainerLoader.java:145)
     at org.unidal.lookup.ContainerLoader.getDefaultContainer(ContainerLoader.java:104)
     at org.unidal.lookup.ContainerLoader.getDefaultContainer(ContainerLoader.java:89)
    
    1. 首先定位到没有找到的方法所在的类jar包路径

    Mac的快捷键是Command+o,也可以到导航栏Navigate->Class点击弹出,如下,将org.codehaus.plexus.ContainerConfiguration输入。这个类路径是如何确定的呢?从上面的异常信息看,没有找到的方法是java.lang.NoSuchMethodError: org.codehaus.plexus.ContainerConfiguration.getLifecycleHandlerManager(),方法所在的类路径一目了然吧?

    image.png
    从上面的Class查找结果看,在两个不同的maven库下存在同样的接口定义,分别是Maven:org.codehaus.plexusMaven:org.sonatype.sisu。如果分别进入两个class查看的话,可以看到在org.codehaus.plexus中是存在getLifecycleHandlerManager方法,而org.sonatype.sisu不存在getLifecycleHandlerManager方法定义的,所以,是程序运行期间加载了org.sonatype.sisu,所以报了NoSuchMethodError的异常。
    2、排除对应冲突的jar包

    既然确定了是因为jvm选择加载了org.sonatype.sisu而不是org.codehaus.plexus,我们的解决方案的目的就很明确了,就是排除org.sonatype.sisu包。在eclise里排除很简单,但是idea貌似不太容易,当然,最后还是找到了解决办法。
    如下图,分部点击对应的123,进入依赖图。


    image.png

    然后Command+f搜索org.sonatype.sisu。定位到sisu-inject-plexus,回车。


    image.png
    右击选择exclude
    image.png
    可以看到,冲突的jar依赖被排除了。
    image.png

    此时再查找class,发现冲突的jar包真的不见了,再次Run起来也OK了。


    image.png
    参考资料

    NoSuchMethodError 常见原因及解决方法
    java--遇到NoSuchMethodError通用解决思路
    NoSuchMethodError推荐

    相关文章

      网友评论

          本文标题:Mac Idea 解决NoSuchMethodError

          本文链接:https://www.haomeiwen.com/subject/ogtuyhtx.html