no such method Exception
通常遇到no such method Exception就是项目中某些包冲突导致,在idea中可以通过自带的“Show dependencies”或者“maven helper”插件来分析依赖树。但是对于打了fat jar、shaded jar的场景下就比较棘手了,可能在dependency里面根本找不到哪里冲突了,此时可利用类的jar包路径来定位到当前classloader加载的是那个包里面的类。
String className = "org.eclipse.jetty.server.session.SessionHandler";
className = className.replace('.', '/');
String resource = "/" + className + ".class";
URL url = SessionHandler.class.getResource(resource);
System.out.println(">>>url:" + url.getFile());
# >>>url:file:/C:/Users/xiaoyao/.m2/repository/com/foo/bar/foo-bar/1.0/foo-bar-1.0.jar!/org/eclipse/jetty/server/session/SessionHandler.class