您能在一个类加载器中加载多个jsf WAR吗?

您能在一个类加载器中加载多个jsf WAR吗?,jsf,classloader,ear,Jsf,Classloader,Ear,我有3个安装了JSF的war文件,3个faces配置文件,当我将它们全部加载到EAR的一个类加载器中时,初始化错误就会失败。如下图所示。似乎JSF不喜欢在一个类加载器中多次加载,有人试过吗?要在EAR中加载3场JSF战争 java.lang.NullPointerException at com.sun.faces.config.processor.ManagedBeanConfigProcessor.process(ManagedBeanConfigProcessor.java:241

我有3个安装了JSF的war文件,3个faces配置文件,当我将它们全部加载到EAR的一个类加载器中时,初始化错误就会失败。如下图所示。似乎JSF不喜欢在一个类加载器中多次加载,有人试过吗?要在EAR中加载3场JSF战争

java.lang.NullPointerException
    at com.sun.faces.config.processor.ManagedBeanConfigProcessor.process(ManagedBeanConfigProcessor.java:241)
    at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:108) 

这个特殊的异常可能是由于类路径中缺少
jsf api.jar
文件,或者类路径中的
jsf api.jar
版本与WAR的
jsf impl.jar
不同,可能是appserver提供的。理论上,有三种方法可以解决此问题:

  • 摆脱WAR中的所有JSFJAR(
    jsfapi.JAR
    JSF impl.JAR
    ),依赖appserver提供的JSF库
  • 去掉战争中的所有JSFJAR,只在EAR中提供它们
  • 将WAR's out中的所有jsfjar对齐,使其具有完全相同的make/version/build
  • 另一个原因可能是WAR包含特定于appserver的库,而这些库又包含JSF类,比如Glassfish的
    javaee.jar
    。所有这些特定于appserver的库也需要从所有WAR和EAR中删除

    要点:保持类路径干净