在 Jakarta EE 中使用 com.sun.faces

Using com.sun.faces with Jakarta EE

我正在尝试将遗留 Java EE 应用程序升级到 Wildfly 服务器上的 Jakarta EE 8。大部分升级都进行得很顺利,因为 8 还没有将包名交换为 jakarta。但是,我们的一些代码使用了 Oracle 的 com.sun.faces 包中的 类。这些 类 似乎包含在 Jakarta EE Faces API specification 中,但是当我使用以下 Maven 依赖项时它们不包含在我们的项目中:

<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>2.3.2</version>
    <scope>provided</scope>
</dependency>

要在类路径中获取这些,我必须使用 Oracle 依赖项:

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.2.20</version>
    <scope>provided</scope>
</dependency>

显然,我们想在某个时候完全放弃使用这个包,但我希望有一种方法可以将它包含在我们的雅加达迁移中。

com.sun.faces.* 不是 Jakarta EE API 的一部分。它是 Jakarta EE 实现 的一部分。更准确地说,它是实际的 JSF 实现。它的名字是“Mojarra”。

你确实不需要在你的 pom.xml 中依赖它才能成为 JEE-implementation-independent(即为了能够将你的 webapp 部署到任何 JEE-compatible服务器没有任何代码更改)。但是,如果代码在您删除它时没有 compile,那么您显然在某个地方对它有很强的依赖性,例如引用 com.sun.faces.* 包的硬编码导入或超类。这确实通常是不正确的。

解决方案应该很简单:

  1. 删除 Mojarra 依赖项
  2. 查找所有编译错误
  3. 使用标准 JSF API 方法一一修复它们
  4. 如果找不到任何人,请在 Stack Overflow 上进行研究或提问