Eclipse Mojarra 对比 (jakarta.faces » jakarta.faces-api)

Eclipse Mojarra vs (jakarta.faces » jakarta.faces-api)

我知道 Mojarra 是 Jakarta Faces 规范的 Eclipse EE4J 实现。
但是这种依赖性呢:

<!-- https://mvnrepository.com/artifact/jakarta.faces/jakarta.faces-api -->
<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>4.0.0</version>
</dependency>

显然它也是由 Eclipse EE4J 实现的 Jakarta Faces 规范的实现:
https://github.com/jakartaee/faces

所以,他们是不是同一个项目?它们之间有什么区别?

Obviously it is also an implementation of Jakarta Faces specification implemented by Eclipse EE4J as well

没有,不是。

按照 https://mvnrepository.com/artifact/jakarta.faces/jakarta.faces-api link and download the JAR file 并使用任何压缩工具检查其内容。您会看到它只包含 jakarta.* 类。它不包含 com.sun.faces.* (Mojarra) 或 org.apache.myfaces.* (MyFaces) 等实施包中的 类。换句话说,它只包含 API 类 而不是 impl 类.

此 JAR 文件实质上是您第一个声明的“Jakarta Faces 规范”部分:

I know that Mojarra is Eclipse EE4J implementation of the Jakarta Faces specification.

至于,

So, are they same project or not

没有,Mojarra项目在这里https://github.com/eclipse-ee4j/mojarra,Mojarra依赖在这里:

<!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.faces -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.faces</artifactId>
    <version>4.0.0-M1</version>
</dependency>

Download the JAR file 并检查其内容。你会看到它包含 jakarta.* com.sun.faces.* 类.

what is the difference between them?

API 可以作为 <scope>provided</scope> 包含在针对成熟的 Jakarta EE 服务器的项目中,该服务器已经随 API+impl 开箱即用。然后,您就可以在代码中导入 jakarta.faces.* 类。对于这些服务器,如果您希望能够在 IDE 的调试器 and/or 中单步执行源代码,则只需将 impl(Mojarra 或 MyFaces)包含为 <scope>provided</scope> 如果您希望 monkeypatch 一些实现 类.

但是在 Tomcat 等准系统 servletcontainer 中,API 依赖项 <scope>compile</scope> 将无法工作,因为缺少实现。您将需要 impl 依赖项。

另请参阅:

  • What exactly is Java EE?
  • In simplest terms, what is a factory?
  • How to properly install and configure JSF libraries via Maven?
  • Difference between Mojarra and MyFaces