【问题标题】:Using com.sun.faces with Jakarta EE在 Jakarta EE 中使用 com.sun.faces
【发布时间】:2021-01-19 22:16:02
【问题描述】:

我正在尝试在 Wildfly 服务器上将旧版 Java EE 应用程序升级到 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>

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

【问题讨论】:

    标签: jsf jakarta-ee


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!您说的是“标准 JSF API 方法”——您有任何文档链接可以与我们的团队分享吗?
    • 归结为用javax.faces.* 替换com.sun.faces.* 导入。如果您找不到标准的 API 方法/对应物,请转到第 4 点。这实际上取决于具体的用例。您没有提供有关它们的任何信息,因此很难给出适合特定用例的更具体的答案。
    • 哦,对不起,我明白了。我的意思是我正在寻找有关最佳实践是仅包含 API Maven 导入的文档。
    • 这只是一般的编码实践。另请参阅stackoverflow.com/q/7295096
    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2021-04-14
    • 2023-02-24
    • 2021-08-19
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多