Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SLF4J:SLF4J api 1.6.x(或更高版本)与此绑定不兼容_Java_Jakarta Ee_Slf4j - Fatal编程技术网

Java SLF4J:SLF4J api 1.6.x(或更高版本)与此绑定不兼容

Java SLF4J:SLF4J api 1.6.x(或更高版本)与此绑定不兼容,java,jakarta-ee,slf4j,Java,Jakarta Ee,Slf4j,如何修复此错误?此外,在我的应用程序中,我没有在任何地方使用slf4j,只有推土机库使用它。从下面的stacktrace中,我看到spring应用程序正在使用slf4j,但是为什么它不自己加载一个呢 2015-09-28 10:02:21,890 ERROR [STDERR] (HDScanner) SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. 2015-09-28 10:02:21,891 ERROR

如何修复此错误?此外,在我的应用程序中,我没有在任何地方使用slf4j,只有推土机库使用它。从下面的stacktrace中,我看到spring应用程序正在使用slf4j,但是为什么它不自己加载一个呢

2015-09-28 10:02:21,890 ERROR [STDERR] (HDScanner) SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding.
2015-09-28 10:02:21,891 ERROR [STDERR] (HDScanner) SLF4J: Your binding is version 1.5.5 or earlier.
2015-09-28 10:02:21,891 ERROR [STDERR] (HDScanner) SLF4J: Upgrade your binding to version 1.6.x.
2015-09-28 10:02:21,891 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/metasolv-web]] (HDScanner) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

SLF4J是基于依赖关系静态绑定的

如果您使用的是log4j,那么应用程序中应该有log4j绑定


即使您没有使用slf4j,您也需要有一个绑定(simple或noop)才能从依赖库中正确加载它。

我不得不从推土机库中排除slf4j依赖项,并将依赖项直接添加到POM文件中

正如@Powerlord所提到的,我必须添加两个库,一个用于核心slf4j,另一个是绑定库

下面是Maven依赖项

java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:191)

org.slf4j
slf4j api
1.6.6
org.slf4j
slf4j简单
1.6.6
net.sf.推土机
推土机
5.5.1
jcl-over-slf4j
org.slf4j
slf4j api
org.slf4j

从上面的错误中,我发现我需要slf4j库,但即使我加载了1.5.5或1.7.5版本的库,它也无法消除上面的错误。如果知道slf4j有两层,那么在slf4j api之外添加此依赖项是否有帮助。第一个是核心。第二个是绑定。听起来核心版本是1.6或更高版本,而所讨论的绑定版本是1.5.5或更低版本。如果slf4j文件位于
WEB-INF/lib
目录中,您可以将slf4j绑定jar换成新版本。或者,如果您使用的是Maven/Gradle,则可以指定一个较新版本的绑定。@Powerlord如何识别绑定库?我在依赖项中看到了
jcl-over-slf4j
slf4j-api
。我认为第二个是核心。@Powerlord您帮助我解决了这个问题,我添加了另一个依赖项
slf4j simple
(绑定),并排除了dozer库中可用的依赖项。如果你在下面加上你的答案,我会把它标记为已回答。
       <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.6</version>
        </dependency>

        <dependency>
            <groupId>net.sf.dozer</groupId>
            <artifactId>dozer</artifactId>
            <version>5.5.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>jcl-over-slf4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>