Exception in thread "main" java.lang.NoSuchMethodError
原文链接:https://blog.csdn.net/yzl_8877/article/details/53216923今天编程又碰到了这个异常。以前碰到了也很少总结,今天就来说一下这个异常发生的几种情况:(1).第一个常见原因jar包中确实没有这个方法,所以虚拟机根本没有加载这个方法。(2).第二个常见原因是jar包冲突了。导致虚拟机不知道加载哪一个,所以就导致了加载失败,从而找不到...
原文链接:https://blog.csdn.net/yzl_8877/article/details/53216923
今天编程又碰到了这个异常。以前碰到了也很少总结,今天就来说一下这个异常发生的几种情况:
(1).第一个常见原因jar包中确实没有这个方法,所以虚拟机根本没有加载这个方法。
(2).第二个常见原因是jar包冲突了。导致虚拟机不知道加载哪一个,所以就导致了加载失败,从而找不到这个方法。
(3).第三个,也许就是包含在第二种情况中,该方法只有抽象定义,而没有具体实现。我今天的遇到的是第二种吧。
闲话不说,直接贴出异常:
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:133)
at org.apache.http.client.protocol.RequestAuthCache.process(RequestAuthCache.java:76)
at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:132)
at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:166)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:485)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:498)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:262)
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:251)
at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:149)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:106)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:71)
at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:85)
at com.solr.insertData.InsertProgarm.main(InsertProgarm.java:40)
出现这样的问题,如何去追踪:
(1).当然是看看我们引入的jar包是否有冲突,按快捷键ctrl+shift+T,输入类名,看看工程下面有几个jar包包含该类:
我的工程是solr_web,所以有三个地方出现了org.slf4j.spi.LocationAwareLogger这个类,不过我不知道工程是加载的哪一个?因此使用下面的语句来查询工程实际加载的是哪一个:
URL urlOfClass = InsertProgarm.class.getClassLoader().getResource("org/slf4j/spi/LocationAwareLogger.class"); //InsertProgarm是该语句所在的类
System.out.println(urlOfClass);
输出结果:
jar:file:/E:/Program%20Files/myeclipse/plugins/com.genuitec.eclipse.j2eedt.core_11.5.0.me201311281640/data/libraryset/EE_6/bean-validator.jar!/org/slf4j/spi/LocationAwareLogger.class
因此加载的是myeclipse自带的包,去反编译下这个包:
这个jar包里有对该接口的实现,所以这个还是jar包冲突了。
我这里去掉了myeclipse自带的jar包。选中你的项目(我这里是solr_web),右键-->properties-->Java Build Path,修改JavaEE6.0 Gerneric Library,去掉MyEclipse自带的冲突jar
确定修改,重新运行,OK!
更多推荐
所有评论(0)