加载所需依赖项后无法加载 class "org.slf4j.impl.StaticLoggerBinder"
Failed to load class "org.slf4j.impl.StaticLoggerBinder" after loading required dependencies
我正在构建我的 Maven 项目并在码头服务器中部署,但我遇到了这个问题。在我的 ${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.
我已经按照其他帖子中提到的步骤进行操作,但仍然无法解决这个问题。请帮忙。谢谢。
您将 SLF API 放入错误的 class 加载程序中。
Class 加载器层次结构看起来像这样(可能有点不准确):
BootstrapClassLoader - loads Java classes
^
|
ExtClassLoader - loads some additional libs
^
|
AppClassLoader - loads Jetty and slf4j-api
^
|
WebAppClassLoader - loads your application and can load slf4j-impl
你的 classes 触发加载 slf4j-api 包,这导致从 WebAppClassLoader
到 AppClassLoader
的委派。然后 slf4j-api classes 将尝试加载 slf4j-impl classes,但只会为它们请求 AppClassLoader
。此 class 加载程序无法委托给您的应用程序 class 加载程序(即图中的委托)。它只委托并没有找到任何东西,因此错误。
您必须将这些库放在同一个 class 加载程序中。在 jetty/lib 或 WAR.
中
我正在构建我的 Maven 项目并在码头服务器中部署,但我遇到了这个问题。在我的 ${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.
我已经按照其他帖子中提到的步骤进行操作,但仍然无法解决这个问题。请帮忙。谢谢。
您将 SLF API 放入错误的 class 加载程序中。
Class 加载器层次结构看起来像这样(可能有点不准确):
BootstrapClassLoader - loads Java classes
^
|
ExtClassLoader - loads some additional libs
^
|
AppClassLoader - loads Jetty and slf4j-api
^
|
WebAppClassLoader - loads your application and can load slf4j-impl
你的 classes 触发加载 slf4j-api 包,这导致从 WebAppClassLoader
到 AppClassLoader
的委派。然后 slf4j-api classes 将尝试加载 slf4j-impl classes,但只会为它们请求 AppClassLoader
。此 class 加载程序无法委托给您的应用程序 class 加载程序(即图中的委托)。它只委托并没有找到任何东西,因此错误。
您必须将这些库放在同一个 class 加载程序中。在 jetty/lib 或 WAR.
中