意外异常:java.lang.NoClassDefFoundError:org/apache/log4j/LogManager

Pet*_*son 10 java eclipse gwt jar

我正在开发一个GWT应用程序.它使用RPC从内部系统收集信息.它通过使用库jar来实现,我们称之为alpha.jar.我们在很多应用程序中都使用这个jar,所以它工作正常,并且它使用ANT构建,在Eclipse之外.

alpha.jar中的一些类引用了LOG4J2以及许多其他外部jar,因此当我们运行一个应用程序时,我们将一个类路径传递给所有这些,并且一切正常.请注意,这不是一个简单的初学者问题.alpha.jar正常工作,包括调用Log4J.

问题:

在Eclipse中,我有这个GWT应用程序项目以及Alpha.jar项目(当然还有源代码).服务器部分需要实例化alpha对象并与alpha系统通信.

通过向Alpha项目添加构建路径引用在GWT中执行此操作时,我的GWT应用程序运行正常.

当我代替项目引用include(在war/WEB-INF/lib中)alpha.jar并运行应用程序时,我第一次从alpha.jar实例化一个类时在标题中得到错误.

alpha.jar的构建方式没有什么特点,所以基本上它应该与eclipse中的项目相同,对吧?

请注意以下事项:

*)alpha.jar的依赖jar也在war/WEB-INF/lib中.log4j2-core,log4j-api以及其他一些(例如apache)

*)如果我删除alpha.jar(和调用它的代码),而只是添加调用LOG4J2的代码,该代码也可以正常工作!

为什么我在使用JAR时会遇到这个奇怪的错误?还要注意NoClassDefFoundError,它不是更常见的ClassNotFoundException.请参阅NoClassDefFoundError和ClassNotFoundException之间的原因和区别是什么?

如果您需要更多信息,请告诉我们.

Ste*_*e C 13

org.apache.log4j.LogManager 是一个来自log4j 1.2的类(不是log4j2).

因此,您的某个Web应用程序jar必须引用它.罪魁祸首应该在堆栈跟踪中可见.

根据您的具体情况,您可能只想将一个log4j 1.2 jar添加到Web应用程序,因为这两个版本完全相互独立.

  • 有人可以澄清一下吗?log4j.Manager 可能是一个 log4j 构造,但可以在 log4j v2.x jar 文件中找到它。log4j 2.x 是 log4j2 构造,对吗? (2认同)