EAR lib的类为WAR成员抛出ClassNotFoundException(不同)

时间:2013-04-10 09:04:18

标签: java jar glassfish war ear

我的EAR具有以下结构:

lib/ 
  helper.jar (Helper classes used both by war1.war and war2.war)
war1.war
    WEB-INF/
        lib/
            entities1.jar
war2.war
    WEB-INF/
        lib/
            entities2.jar

当war1调用helper.jar中的一个类本身调用Class.forName(“war1中的一个类”)时,它会抛出 ClassNotFoundException

请注意,当war类加载ear / lib类时,人们通常会有ClassNotFoundException。 我的情况正好相反。

我的EAR部署在Glassfish 3.1.2中。

我见过类似的情况,但在JBoss中,“EAR lib's class throwing a ClassNotFoundException for a WAR member”,但答案说这是一个“循环依赖”问题。但是,我没有看到任何“循环依赖”问题。在java中,任何ClassX都可以引用ClassY,即使ClassY引用ClassX ....

1 个答案:

答案 0 :(得分:3)

helper.jar中,您无法使用war1.war简单地加载Class.forName中的班级。

限制来自Class.forName方法使用的默认类加载器,它是企业应用程序的类加载器(加载helper.jar的方法),它只知道它的父项,而不知道它的子项({{ 1}}和war1.war类加载器)。

您的问题的解决方案是明确使用上下文类加载器,它按顺序扫描:

战争 - >耳朵 - > system - >扩展名 - >自举

这可以使用:

完成
war2.war