gpt4 book ai didi

java - NoSuchMethodError : org. slf4j.impl.StaticLoggerBinder.getSingleton()

转载 作者:太空狗 更新时间:2023-10-29 22:45:18 26 4
gpt4 key购买 nike

问题是由我的 pom.xml [cxf-bundle-jaxrs] 中的一个依赖项引起的,它在内部使用较低版本的 slf4j。我设法通过将此依赖项升级到最新版本来解决此问题。谢谢大家。

我正在尝试将 Apache Shiro 添加到我的 CXF Spring Web 应用程序中。当我启动我的 tomcat 7 时,出现以下错误

Caused by: java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
at org.apache.shiro.spring.LifecycleBeanPostProcessor.<clinit>(LifecycleBeanPostProcessor.java:51)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877)
... 25 more

我的 shiro 和 slf4j 的 pom.xml 是

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>runtime</scope>
</dependency>

我已经通过谷歌搜索尝试了所有可能的解决方案,但没有成功。

最佳答案

Caused by: java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

这意味着您的类路径中有类 StaticLoggerBinder。但是你的类路径的类没有方法 getSingleton()

当您的依赖项都使用相同的传递依赖项时,通常会发生这种情况。这意味着您的两个依赖项(或您的应用程序和一个传递依赖项)都在内部使用不同版本的 SLF4J。但是你的应用程序只能同时使用一个版本的类,所以它必须选择(不知道这里的规则......随机?)

要解决这个问题,你通常需要做一个mvn dependency:tree来查看哪些使用了不同版本的SLF4J。

解决方案通常是在最低版本上使用 Maven 依赖项排除。像 SLF4J 这样的库往往是可追溯的,这意味着更新的版本会不断添加更多的特性。有时,一个方法被删除,然后你必须保留旧的库版本,并祈祷。如果这不起作用,还有一些选项,例如 JarJar

但对于日志库,它有时会有点不同,所以我的解释是出于一般目的,但您可能没有使用正确的日志库依赖项,因为它们有非常特殊的包装,并不总是容易理解:)


检查我为您找到的内容:

getSingleton() 方法出现在 1.5.6 版本中,因此您的库很可能使用 1.5.6 之前的 SLF4J 版本 :) 您只需要排除它排除专家(并祈祷)。


编辑:你应该尝试:

<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle-jaxrs</artifactId>
<version>2.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>

更好的是,如果你有一个带有父 pom 的多模块 maven 项目,你可以将它与 maven dependencyManagement xml 节点一起使用。

关于java - NoSuchMethodError : org. slf4j.impl.StaticLoggerBinder.getSingleton(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com