【问题标题】:How to use JSF version specified in POM (and not app server one)?如何使用 POM 中指定的 JSF 版本(而不是应用服务器之一)?
【发布时间】:2012-12-16 17:57:57
【问题描述】:

我的应用服务器是 Glassfish 3.1.1,使用 Mojarra 2.0.3 FCS(据我所知)。我希望我的应用程序使用 JSF 2.1.2。我已经找到了可以在我的 maven 构建中使用的正确工件。

现在,如何确保从该工件加载 JSF 类,而不是遵循 Glassfish libvrary 类加载器的“经典”委托(它将加载 JSF 2.0.3 并为我的 omnifaces/richfaces 附加组件生成 ClassNotFoundException)?

【问题讨论】:

    标签: jsf jakarta-ee maven glassfish


    【解决方案1】:

    一般来说,如何从档案中覆盖特定的 Java EE 工件是特定于应用程序服务器的。如果是 GlassFish,如果我没记错的话,您可以在 WEB-INF/glassfish-web.xml 中使用以下内容:

    <glassfish-web-app error-url="">
        <class-loader delegate="false" />
        <property name="useBundledJsf" value="true" />
    </glassfish-web-app>
    

    替换 [glassfish home]/glassfish/modules 中的 jar 也有效。这正是 JSF 构建脚本所做的,所以应该保证它可以工作。

    请注意,如果您从低至 2.0.3 的版本升级到当前版本,您会发现从 2 个 jar 变为 1 个 jar。所以在那种情况下 [glassfish home]/glassfish/domains/domain1/config/default-web.xml[glassfish home]/glassfish/lib/templates/default-web.xml 删除 jsf-api.jar 和 jsf-impl.jar 条目,并将它们替换为单个 javax.faces.jar。

    也许更简单的替代方法是 download 最新版本的 GlassFish (3.1.2.2)。

    【讨论】:

    • 从 Mojarra 2.1.6 开始从 2 个 JAR 更改为 1 个 JAR。 OP 正在尝试使用 Mojarra 2.1.2,它仍然是 2 个 JAR(已经 1.5 年了,所以我想知道为什么要使用这么旧的版本)。
    • 确实,不错。 OP确实令人费解。 GlassFish 3.1.1 然后是专门去 Mojarra 2.1.2 的愿望。嗯……
    • @BalusC 事实上,我不是该部分应用程序的官方开发人员,因此我也对这样的要求感到困惑(稍后我将调查)。为了补充 Arjan 的答案,this blog article 很好地解释了这种修改的后果。
    猜你喜欢
    • 2013-10-17
    • 2011-02-27
    • 2010-12-15
    • 2011-02-23
    • 2021-10-13
    • 2011-02-14
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多