4

我想在我的 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 

(请在 PasteBin 上查看完整的堆栈跟踪)

对于 EAR 的 pom.xml,我将这个 Maven 依赖项用于 PrimeFaces:

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

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

我用谷歌搜索了很多,但没有找到任何解决方案。谢谢你的任何建议。

4

1 回答 1

8

你不能。Webapp 库不EAR/lib属于WAR/WEB-INF/lib. 从来没有打算将EAR/lib其作为 EAR 的所有 WAR 项目的“共享库”。这仅适用于 EAR 的所有 EJB 项目(业务服务)。

您面临的LinkageErrorPrimeFaces 特定类是因为(默认)特定于 webapp 的库(如 JSF API/impl)不可用于EAR/lib. 这会导致EAR/lib其中具有(虚拟)依赖项的所有库都WAR/WEB-INF/lib失败并出现类加载错误,例如LinkageError.

如果您真的需要所有 WAR 项目的“共享库”,那么您最好的选择是将库放入 Java EE 容器本身(就像默认情况下已经为 JSF API/impl 库所做的那样)。对于 JBoss,这称为“模块”。但是,我不建议这样做,因为这会使 webapp 无法跨容器移植,而无需由 serveradmin 专门配置容器。只需给每个 webapp 自己的 webapp 库集。

于 2013-11-04T12:17:17.873 回答