无法加载类" org.slf4j.impl.StaticLoggerBinder"加载所需的依赖项后

时间:2015-07-08 20:10:02

标签: java eclipse maven jetty slf4j

我正在构建我的maven项目并在jetty服务器中部署,我遇到了这个问题。在我的$ {jetty_home} / lib中,我有jcl-over-slf4j-1.7.2.jar,jul-to-slf4j-1.7.2.jar,slf4j-api-1.7.2.jar。和我的maven项目一起,我有

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.2</version>
            <scope>provided</scope>
        </dependency>

在mvn依赖关系树中,对于slf4j,我看到以下内容:

[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.2:compile
[INFO] |  \- log4j:log4j:jar:1.2.17:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.2:provided (scope not updated to compile)

除此之外,我将commons-logging-1.2.jar与我的项目捆绑在一起。现在我构建我的maven项目,如果我使用我的eclipse jetty插件运行它,我没有任何问题,完美的一切都工作正常。 之后,我尝试在jetty webapp文件夹中的远程服务器中部署它,现在我得到了,

Establishing start.log on Wed Jul 08 12:46:13 PDT 2015
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

我按照其他帖子中提到的步骤进行了此操作,但仍无法解决此问题。请帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

您已将SLF API放入错误的类加载器中。

类加载器层次结构看起来像这样(可能有点不准确):

BootstrapClassLoader - loads Java classes
   ^
   |
ExtClassLoader - loads some additional libs
   ^
   |
AppClassLoader - loads Jetty and slf4j-api
   ^
   |
WebAppClassLoader - loads your application and can load slf4j-impl

您的类会触发加载slf4j-api包,从而导致从WebAppClassLoaderAppClassLoader的委派。然后slf4j-api类将尝试加载slf4j-impl类,但只会询问AppClassLoader。此类加载器无法委托给您的应用程序类加载器(即图中的委托)。它只会代理并找不到任何内容,因此错误。

您必须将这些库放在同一个类加载器中。在jetty / lib或WAR中。