包含外部项目的NoClassDefFoundError - JBoss 7.1

时间:2013-01-04 08:24:04

标签: java eclipse jboss jboss7.x noclassdeffounderror

我同时负责2个项目。第一个(A)是一个库,第二个(B)是一个在JBoss AS 7.1上工作的Java EE项目。

B需要来自A的库。它们都是使用Eclipse Juno编写的。

我设法将A项目作为jar包含在WEB-INF / lib文件夹中。当我“重新发布”时,A.jar会自动编译并包含在WEB-INF / lib文件夹中。

但是,当我想加载一个从A调用库的页面时,我在A上的类中有一个NoClassDefFoundError

2 个答案:

答案 0 :(得分:1)

当类在编译时可用但在运行时中找不到时,发生NoClassDefFoundError。如果你已经确保A.jar已经正确地复制到WEB-INF / lib,那么其他嫌疑人可能是缺少的类不在那个jar里面。尝试查看A.jar内部,例如通过提取它并查看缺少的类是否在其中。

答案 1 :(得分:1)

当JVM或ClassLoader实例尝试加载类的定义并且在运行时找不到正确的定义时,抛出NOClassDefFoundError。

因此,请检查您是否在库A 中打包了一个较旧(或错误)的类,与B模块所需的版本不同(典型的例子是类可以找到了,但它没有应用程序调用者所需的方法定义。

另一方面,请记住,JBoss默认使用统一的类加载器和Java父代理,因此尽管在同一个JBoss实例中的多个模块中部署了一个库,但JBoss只加载一个(在模块之间共享) ,优先考虑父母所包含的。如果多个模块必须使用同一库的不同版本,则可能会导致意外行为。 如果您在JBoss实例中部署了多个版本的库A,那么请检查。