Exception in thread "main" java.lang.NoSuchMethodError

    xiaoxiao2021-12-02  18

    今天编程又碰到了这个异常。以前碰到了也很少总结,今天就来说一下这个异常发生的几种情况:

    (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 Files/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!

    
    转载请注明原文地址: https://ju.6miu.com/read-679681.html

    最新回复(0)