【发布时间】:2014-10-13 10:58:20
【问题描述】:
我正在开发一个 GWT 应用程序。它使用 RPC 从内部系统收集信息。它通过使用库 jar 来实现,我们称之为 alpha.jar。我们在许多应用程序中使用这个 jar,所以它工作正常,顺便说一句,它是用 ANT 构建的,在 Eclipse 之外。
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 的依赖 jars 也在 war/WEB-INF/lib 中。 log4j2-core、log4j-api 以及其他一堆(例如常见的 apache)
*) 如果我删除 alpha.jar(以及调用它的代码),而只是添加调用 LOG4J2 的代码,那么该代码也可以正常工作!
我在使用 JAR 时为什么会出现这个奇怪的错误?还要注意 NoClassDefFoundError,它不是更常见的 ClassNotFoundException。请看What causes and what are the differences between NoClassDefFoundError and ClassNotFoundException?
如果您需要更多信息,请告诉我。
【问题讨论】:
-
您能否提供构建脚本...您可能缺少记录消息所需的 Log4J 依赖项。并在 Eclipse 和 Ant 中检查您的 Java 运行时/SDK(应该相同)
-
不,我没有遗漏依赖项。请再次阅读问题。
-
抱歉,但从您对问题的描述中,我无法理解您到底在做什么以及问题出在哪里 - 因此到目前为止没有人回答您的问题。
-
这个其他答案可能与一些有这个问题的人更相关。 stackoverflow.com/questions/32368758/…