slf4j Logger、LoggerFactory 在运行时无法从子 jar 运行

问题描述 投票:0回答:2

我在子 jar 中使用 slf4j Logger 和 LoggerFactory 时遇到问题(假设 CHILD.jar)。 我正在 WebSphere 中部署一个 EAR。 EAR结构如下-

家长耳朵>

  • 元信息
  • 项目特定的依赖 jars
  • 项目子模块捆绑为 jars
  • commons-logging-1.0.4.jar
  • common-logging-api-1.1.jar
  • 儿童.jar

在 CHILD.jar 的 MANIFEST.MF 中,我们没有提供任何 CLASSPTH 条目,因为此 CHILD.jar 被其他几个应用程序使用,而这些其他应用程序可能不使用任何相同的 slf4j 实现器。 下面是 MANIFEST 文件结构-

清单版本:1.0

构建Jdk:1.7.0

构建者:C12560

Archiver 版本:Plexus Archiver

创建者:Apache Maven 3.0.4

在我们的应用程序中,我们将所有 jar 保存在 CHILD.jar 所在的同一层次结构中。 现在,在部署时,不会引发任何异常。在运行时,它会在我们使用 org.slf4j.Loggerorg.slf4j.LoggerFactory 的所有类中抛出 InvocationTargetException(和 NoClassDefFoundError)。 如果我们注释掉所有这些记录器条目,应用程序将正常工作,并且在运行时不会引发异常。

即使我们使用 org.apache.log4j.Logger 而不是 org.slf4j.Logger,代码也会在运行时运行(注意 - log4j-1.2.13.jar 与 CHILD.jar 存在于同一层次结构中)。

查询- slf4j 没有得到它的实现吗? 我必须将任何 jar 包含在与 CHILD.jar 相同的层次结构中吗?

请注意-我尝试将 jcl-over-slf4j jar 和 log4j-over-slf4j.jar(并删除了 common-logging.jar)包含在与 CHILD.jar 相同的层次结构中,但它不起作用。

非常感谢任何帮助。

runtime slf4j
2个回答
0
投票

如果你想使用jcl或log4j作为slf4j的实现者,你需要的是slf4j-jcl.jar或slf4j-log4j.jar。

此外,当收到 NoClassDefFoundError 时,您应该检查完整的堆栈跟踪。通常是由其他一些异常引起的。


0
投票
  • 我最近遇到了这个问题。这是因为 jar 不存在于 classpath 中。
  • 创建一个lib文件夹并向其中添加slf4j api和impl jar。
  • 使用以下命令。
    -cp jarName.jar:lib/* com.job.MainClass args
© www.soinside.com 2019 - 2024. All rights reserved.