当前位置: 首页 > 面试题库 >

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

冯霖
2023-03-14
问题内容

我正在开发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的html" target="_blank">构建没有特殊性,因此基本上它与eclipse中的项目应该是同一件事,对吗?

请注意以下几点:

*)alpha.jar的从属jar也位于war / WEB-INF / lib中。log4j2-core,log4j-api以及其他一些(例如,Apache常见)

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

在使用JAR时,怎么会收到这个奇怪的错误?还请注意NoClassDefFoundError,它不是更常见的ClassNotFoundException。请查看什么原因以及NoClassDefFoundError和ClassNotFoundException之间有什么区别?

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我想在我正在使用的Elasticsearch中执行单元测试, 我正在使用 并参考以下链接以寻求帮助 https://www.elastic.co/guide/en/elasticsearch/reference/1.6/using- elasticsearch-test-classes .html https://github.com/elastic/elasticsearch/blo

  • 问题内容: 我遇到了一个有趣的问题,其中在运行时找不到org.apache.log4j.Logger类。我正在尝试获得授权,这就是失败的地方: 我正在使用JDeveloper 11.1.1.6。这是我所知道的: 我已经查看了我的UI.war / WEB-INF / lib目录,在那里看到了log4j-1.2.17.jar。 抱怨它的类是org.opensaml.xml.XMLConfigurato

  • 问题内容: 我正在尝试使用Eclipse在Maven项目中作为Java应用程序运行,并且遇到以下运行时错误。错误如下所示。 线程“主”中的异常java.lang.NoClassDefFoundError:com.wang.testMaven.App.main(App.java:16)上的org / apache / http / ConnectionReuseStrategy造成原因:java.l

  • 问题内容: 我尝试通过Solrj查询Solr 这是我的代码 } 这给了我一个例外 PS。我的个人有以下罐子: * apache-commons-logging, httpclient -4.2, httpcore 4.2.1,slf4j-api 1.6.2, apache-solr-solrj -1.4.0 *** 问题答案: 您需要在类路径上使用commons-codec.jar。

  • 我在windows 7 32位操作系统上使用visual studio 2010 C#和IEDRiverServer.exe Webdriver Version2.42。 简而言之,我找到一个元素并单击它,操作完成得很好(单击该元素并导致弹出窗口(不是新窗口)关闭),但代码似乎等待了一段时间,然后在click()行抛出一个错误(WebDriverException)。 它几乎就像它没有意识到它成功

  • 函数 unexpected 调用 set_unexpected 函数指定的函数。如果没有用 set_unexpected 函数指定函数,则默认调用 terminate。 函数 terminate 可以显式调用,在无法捕获抛出的异常时、在异常处理期间打乱堆栈时、作为调用unexpected的默认操作时或在异常导致堆栈解退时析构函数抛出异常的情况下都会调用 terminate。 函数set_termi