如何在 WildFly 上安装 JSF 2.3 (javax.faces.jar) 的一个 jar 变体

How to install one jar variant of JSF 2.3 (javax.faces.jar) on WildFly

我想在我的应用程序上使用 JSF 2.3,但 WildFly 使用 2.2 的 2 JAR 变体。

Oracle 在这里说 https://javaserverfaces.java.net/2.3/download.html 不会发布 2.3 2 JAR 变体。

这是手动过程:

  1. 使用 ZIP 工具解压缩 javax.faces.jar。您将获得 3 个文件夹 comjavaxMETA-INF
    (注意:在某些版本中您还会看到 jsf.js根目录下的文件,但这是一个错误,你应该忽略它,它已经位于 META-INF/resources/javax.faces)

  2. 使用 ZIP 工具将 comMETA-INF 文件夹打包到 jsf-impl.jar 中。

  3. 然后,删除META-INF中的所有files/subfolders 除了 of MANIFEST.MF.

  4. 使用 ZIP 工具将 javaxMETA-INF 文件夹打包到 jsf-api.jar 中。

  5. 在此处继续使用这些 JAR:Upgrade JSF / Mojarra in JBoss AS / EAP / WildFly


感兴趣的是,JBoss AS 和 WildFly 在内部对基于 API 的 API 和 impl 文件的 Java EE 进行了模块化分离。分离的 JAR 文件 jsf-api.jarjsf-impl.jar 仍然需要。原因不是真正的技术,而只是一种额外的服务,迫使开发人员针对正确的库进行编程。只有 API 模块在编译期间暴露(通常,通过 IDE 集成插件将它们添加到“构建路径”)。这应该避免初学者意外发现、导入和使用实现 类,例如 com.sun.faces.* 包中的实现。

从版本 1.x 开始,JSF 实现 Mojarra 就由两个 JAR 文件组成:jsf-api.jarjsf-impl.jar。 API JAR 包含 javax.faces.* 类,实现 JAR 包含 com.sun.faces.* 类。由于构建系统的更改符合 Java EE Maven 规则,API 和实现 类 都合并到一个 javax.faces.jar 文件中,另请参阅 issue 2028 (从 2011 年 12 月的 Mojarra 2.1.6 开始)。从 Mojarra 2.3 开始,不再构建分离的 JAR 文件。