Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker,,在项目中遇到了下面的错误
分享于 点击 842 次 点评:126
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker,,在项目中遇到了下面的错误
在项目中遇到了下面的错误,方法未定义,异常信息如下
jar:file:/C:/Users/Administrator/.m2/repository/com/salesforce/phoenix-client/2.2.2/phoenix-client-2.2.2.jar!/org/slf4j/spi/LocationAwareLogger.classException 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.springframework.core.env.AbstractEnvironment.<init>(AbstractEnvironment.java:114) at org.springframework.core.env.StandardEnvironment.<init>(StandardEnvironment.java:54) at org.springframework.context.support.AbstractApplicationContext.createEnvironment(AbstractApplicationContext.java:427) at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:227) at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:90) at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:59) at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:61) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:136) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
这是一个jar包冲突的问题,项目中引用了一个变态的jar包,这个jar包打了许多第三方包在里面,导致了冲突。
可以通过下面的方法确认冲突发生在那个包中:
URL urlOfClass = App.class.getClassLoader().getResource("org/slf4j/spi/LocationAwareLogger.class"); System.out.println(urlOfClass);
这个输出中会有具体的jar包。找到冲突的jar包之后可以有两种方法来解决问题。
通过修改jar包的内容,删除不必要的第三方包,这有一定风险,但可行将这个冲突包放在引用的最后位置,这样,他的第三方包就永远不会被用到,除非项目中没有他的第三方包
用户点评