我在子 jar 中使用 slf4j Logger 和 LoggerFactory 时遇到问题(假设 CHILD.jar)。 我正在 WebSphere 中部署一个 EAR。 EAR结构如下-
家长耳朵>
在 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.Logger 和 org.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 相同的层次结构中,但它不起作用。
非常感谢任何帮助。
如果你想使用jcl或log4j作为slf4j的实现者,你需要的是slf4j-jcl.jar或slf4j-log4j.jar。
此外,当收到 NoClassDefFoundError 时,您应该检查完整的堆栈跟踪。通常是由其他一些异常引起的。
-cp jarName.jar:lib/* com.job.MainClass args