将com.sun.faces与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>

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

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

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

com.sun.faces.*不是雅加达EE API的一部分。它是雅加达EE实施的一部分。更确切地说,它是实际的JSF实现。它的名字是";Mojarra";。

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

解决方案应该直截了当:

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

另请参阅:

  • Java EE究竟是什么
  • 简单来说,什么是工厂
  • com.sun包里有什么

最新更新