无法将PrimeFaces添加为EAR的库

xwi*_*nus 3 jsf jboss java-ee primefaces

我想在我的Java EE 6(Jboss AS 7.1.1Final)应用程序中使用PrimeFaces,具有以下结构:

EAR
|- lib/
|    |- primefaces-4.0.jar
|
|- ejb-module.jar
|- webbapp1.war
|- webapp2.war
Run Code Online (Sandbox Code Playgroud)

但是,在部署到JBoss AS 7时,我遇到了几个例外,例如:

java.lang.LinkageError: Failed to link org/primefaces/context/PrimeFacesContextFactory 
Run Code Online (Sandbox Code Playgroud)

(请参阅PasteBin上的完整堆栈跟踪)

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

    <dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>4.0</version>
    <type>jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

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

Bal*_*usC 7

你不能.Webapp库不属于EAR/lib,但属于WAR/WEB-INF/lib.对于EAR/libEAR的所有WAR项目,它从未被用作"共享库".它仅适用于EAR的所有EJB项目(业务服务).

LinkageError因为像JSF API/IMPL(默认)特定的web应用,库不能为使用的类加载器上你面临的一个具体PrimeFaces级引起EAR/lib.这会导致EAR/lib具有(虚拟)依赖关系的所有库WAR/WEB-INF/lib失败,类加载错误就像LinkageError.

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