我同时负责2个项目。第一个 (A) 是一个库,第二个 (B) 是一个在 JBoss AS 7.1 上工作的 Java EE 项目。
B 需要来自 A 的库。它们都是使用 Eclipse Juno 编写的。
我设法将 A 项目作为 jar 包含在 WEB-INF/lib 文件夹中。当我“重新发布”时,A.jar 会自动编译并包含在 WEB-INF/lib 文件夹中。
但是,当我想加载一个从 A 调用库的页面时,我在 ANoClassDefFoundError
的类上有一个。
我同时负责2个项目。第一个 (A) 是一个库,第二个 (B) 是一个在 JBoss AS 7.1 上工作的 Java EE 项目。
B 需要来自 A 的库。它们都是使用 Eclipse Juno 编写的。
我设法将 A 项目作为 jar 包含在 WEB-INF/lib 文件夹中。当我“重新发布”时,A.jar 会自动编译并包含在 WEB-INF/lib 文件夹中。
但是,当我想加载一个从 A 调用库的页面时,我在 ANoClassDefFoundError
的类上有一个。
NoClassDefFoundError 当类在编译时可用但在运行时找不到时发生。如果您确保 A.jar 已正确复制到 WEB-INF/lib,则其他怀疑可能是缺少的类不在该 jar 中。尝试查看 A.jar 内部,例如通过提取它并查看缺少的类是否在其中。
当 JVM 或 ClassLoader 实例尝试加载类的定义并且在运行时找不到正确的定义时,将引发 NOClassDefFoundError。
因此,请检查您是否在库 A 中打包了该类的较旧(或错误)版本,与您的 B 模块所需的不同(典型示例是可以找到该类,但它没有该方法应用程序调用者需要的定义)。
另一方面,请记住,默认情况下,JBoss 使用统一的类加载器和 Java Parent 委托,因此尽管一个库部署在同一个 JBoss 实例中的多个模块中,但 JBoss 只加载一个(在模块之间共享它),优先考虑到包含在父级中的那个。如果多个模块必须使用同一库的不同版本,这可能会导致意外行为。因此,还要检查您的 JBoss 实例中是否部署了库 A 的多个版本。