将 com.sun.faces 与 Jakarta EE 结合使用

den*_*yne 5 jsf jakarta-ee

我正在尝试将 Wildfly 服务器上的旧版 Java EE 应用程序升级到 Jakarta EE 8。由于 8 尚未将软件包名称交换为 jakarta,因此大部分升级都很顺利。但是,我们的一些代码使用 Oracle com.sun.faces 包中的类。这些类似乎包含在 Jakarta EE Faces API规范中,但当我使用以下 Maven 依赖项时,它们不包含在我们的项目中:

<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>2.3.2</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

为了将它们放入类路径中,我必须使用 Oracle 依赖项:

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.2.20</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 5

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

您确实不需要为了pom.xml独立于 JEE 实现而依赖它(即为了能够将您的 web 应用程序部署到任何 JEE 兼容服务器而无需更改任何代码)。然而,如果代码在您删除它时无法编译,那么您显然在某个地方对它有硬依赖,例如硬编码的导入或引用 package.json 的超类com.sun.faces.*。这确实通常是不正确的。

解决方案应该很简单:

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

也可以看看: