小编典典

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

java

我正在开发GWT应用程序。它使用RPC从内部系统收集信息。它是通过使用一个库jar来实现的,我们称其为alpha.jar。我们在许多应用程序中都使用了这个jar,因此它可以正常工作,并且在日食之外使用ANT构建。

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

问题:

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

在GWT中通过向Alpha项目添加构建路径引用来执行此操作时,我的GWT应用运行良好。

当我代替项目引用(在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之间有什么区别?

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


阅读 407

收藏
2020-09-28

共1个答案

小编典典

org.apache.log4j.LogManager 是log4j 1.2中的类(不是log4j2)。

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

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

2020-09-28