0

如何在不同的 GlassFish 独立实例上部署 Web 应用程序(战争),同时在每个实例上使用不同的 Mojarra 版本。

我们计划将使用的 Mojarra 版本从 GF 3.1.2.2 默认使用的 2.1.6 更新到 Mojarra 2.1.24。在我们的 JSF 应用程序中,我们使用 2.2 到 3.5 版本的 PrimeFaces。在我们将应用程序投入生产之前,在 Mojarra 更新之后,我们希望在同一节点内的独立 GlassFish 实例上对其进行测试。

我们如何实现,部署在这个独立实例上的应用程序使用不同的 Mojarra 版本,然后在域管理服务器上可用。该项目是用maven构建的。

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>
        <version>2.1.24</version>
        <scope>runtime</scope>
    </dependency>

使用编译、提供和运行时尝试依赖的范围。部署时

[#|2013-10-25T13:11:25.122+0200|INFO|glassfish3.1.2|javax.enterprise.resource.webcontainer.jsf.config|_ThreadID=150;_ThreadName=Thread-2;|Mojarra 2.1.6 (SNAPSHOT 20111206) für Kontext '/TestApp'

即使在部署时将 javax.jaces.jar 放入instance-root/lib/applibs并设置--libraries选项也不起作用。

感谢您的任何想法。

4

1 回答 1

1

好吧,您可以做的是使用Maven 配置文件来包含条件依赖项。Glassfish 包含开箱即用的 jsf API 和实现。因此,您需要为您的项目指定要编码的 API,将其标记为已提供,因为您不需要部署它们:

<profiles>
    <profile>
        <id>old-glassfish</id>
        <dependencies>
            <dependency>
                <groupId>javax.faces</groupId>
                <artifactId>jsf-api</artifactId>
                <version>2.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </profile>
    <profile>
        <id>new-glassfish</id>
        <dependencies>
            <dependency>
                <groupId>javax.faces</groupId>
                <artifactId>jsf-api</artifactId>
                <version>2.1</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>

我不做 Glassfish,但您也应该更改提供的 JSF 库以建立您感兴趣的库。SO 中有一些线程解释了您必须做什么来更新它们。

否则,您也可以为每个应用程序使用自己的 JSF 实现,正确配置服务器以不使用其捆绑的库。

也可以看看:

如何在 GlassFish 中更新 Mojarra 版本

于 2013-10-28T09:53:31.790 回答