在子jar中使用slf4j Logger和LoggerFactory时,我遇到了一个问题(假设是CHILD.jar)。 我正在 WebSphere 中部署一个EAR。 EAR结构如下 -
亲耳>
在CHILD.jar的MANIFEST.MF中,我们没有提供任何CLASSPTH条目,因为这个CHILD.jar被其他几个应用程序使用,而那些其他应用程序可能不使用任何相同的slf4j实现者。 下面是MANIFEST文件结构 -
清单 - 版本:1.0
Build-Jdk:1.7.0
内置:C12560
Archiver-Version:Plexus Archiver
创建者:Apache Maven 3.0.4
在我们的应用程序中,我们将所有jar保持在 CHILD.jar 所在的同一层次结构中。 现在在部署时,不会抛出任何异常。在运行时,它在我们使用 org.slf4j.Logger 和 org的所有类中抛出 InvocationTargetException (以及 NoClassDefFoundError ) .slf4j.LoggerFactory 即可。 如果我们注释掉所有这些记录器条目,那么应用程序工作正常,并且在运行时不会抛出任何异常。
即使我们使用org.apache.log4j.Logger 而不是 org.slf4j.Logger,代码也在运行时工作(注意 - log4j-1.2.13.jar同样存在层次结构为CHILD.jar)。
查询 - slf4j没有得到它的实现者吗? 我必须包含在与CHILD.jar相同的层次中的任何罐子吗?
请注意 - 我尝试在与CHILD.jar相同的层次结构中包含jcl-over-slf4j jar和log4j-over-slf4j.jar(并删除了common-logging.jar)但是它没有工作。
非常感谢任何帮助。
答案 0 :(得分:0)
如果你想使用jcl或log4j作为slf4j的实现者,你需要的是slf4j-jcl.jar或slf4j-log4j.jar。
此外,在获取NoClassDefFoundError时,您应该完成完整的堆栈跟踪。通常它是由其他一些例外造成的。