无法将PrimeFaces添加为EAR的库

时间:2013-11-04 10:56:22

标签: jsf java-ee primefaces jboss

我想在我的Java EE 6(Jboss AS 7.1.1Final)应用程序中使用PrimeFaces:

EAR
|- lib/
|    |- primefaces-4.0.jar
|
|- ejb-module.jar
|- webbapp1.war
|- webapp2.war

但是,在部署到JBoss AS 7时,我遇到了一些例外情况,例如:

java.lang.LinkageError: Failed to link org/primefaces/context/PrimeFacesContextFactory 

(请参阅完整堆栈跟踪here on PasteBin

对于EAR的pom.xml,我正在使用PrimeFaces的Maven依赖:

    <dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>4.0</version>
    <type>jar</type>
</dependency>

但是,当我将依赖项放入一个WAR的pom.xml中时,它可以工作,但我想在多个WAR之间共享primefaces库。

我已经google了很多但没有找到任何解决方案。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:7)

你做不到。 Webapp库不属于EAR/lib,而属于WAR/WEB-INF/libEAR/lib永远不会被用作EAR所有WAR项目的“共享库”。它仅适用于EAR的所有EJB项目(业务服务)。

您所面临的PrimeFaces特定类上的LinkageError是由于({默认的)特定于webapp的库(如JSF API / impl)不可用于EAR/lib所使用的类加载器。这会导致EAR/libWAR/WEB-INF/lib中具有(虚拟)依赖关系的所有库在LinkageError等类加载错误时失败。

如果你真的需要一个所有WAR项目的“共享库”,那么最好的办法是将库放在Java EE容器本身(就像默认情况下已经为JSF API / impl库完成的那样)。在JBoss的情况下,这被称为“模块”。但是我不建议这样做,因为这使得webapp不能在容器之间移植,而没有通过serveradmin专门配置容器。只需为每个webapp提供一组自己的webapp库。