提问者:小点点

在雅加达使用com. sun.faceEE


我正在尝试将旧JavaEE应用程序升级到Wildfly服务器上的JakartaEE8。由于8还没有将包名交换到jakarta,因此大部分升级都很顺利。但是,我们的一些代码使用了Oracle的com. sun.face包中的类。这些类似乎包含在JakartaEEFacesAPI规范中,但是当我使用以下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>

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


共1个答案

匿名用户

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

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

解决方案应该是直截了当的:

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