来自jsf-api-2.2.0-m05.jar的javax.faces-2.1.14.jar和jsf-impl-2.2.0-m05.jar之间的区别是什么?

我对jsf-api-2.2.0-m05.jar和jsf-impl-2.2.0-m05.jar的javax.faces-2.1.14.jar的区别感到困惑。我试图在不使用的情况下制作一个jsf项目maven,在搜索示例时,我在不同的教程中看到了不同的jar依赖项。 coreservlets的教程使用javax.faces-2.1.14.jar,我从另一个站点看到的另一个教程使用了2个jar文件jsf-api-2.2.0-m05.jar和jsf-impl-2.2.0-m05。 jar我想知道这两组依赖关系的区别。 先谢谢你们。

jsf-api-xxx.jar包含java包javax.faces包下的类。 这个jar中的类是JSF规范定义的标准API的实现。 jsf-impl-xxx.jar包含java包com.sun.faces下的类,正如java包所示,它是Sun自己的JSF实现类。

javax.faces-xxx.jar实际上将前两个jar文件合并在一起。 在Maven存储库中,它位于org.glassfish groupId下。 你会在里面找到javax.facescom.sun.faces java包。

那么你应该用什么来开发? 实际上你可以使用两者。 但推荐的方法是仅在编译类路径中包含jsf-api-xxx.jar 。 因此,您自己的应用程序不依赖于com.sun.faces包下的任何类来实现对其他JSF实现的可移植性 。 如果您使用的是GlassFish等应用程序,则容器应该已经在运行时提供了JSF实现。 您不应该使用war或ear文件打包上述JSF jar文件,因为服务器将提供所有这些文件。 如果您使用默认情况下没有JSF实现的容器(如Tomcat),则需要打包javax.faces-xxx.jar或( jsf-api-xxx.jar + jsf-impl-xxx.jarWEB-INF/lib

它们是不同的版本。

  • javax.faces-2.1.14.jar是2.1.14的组合JAR文件
  • jsf-api-2.2.0-m05.jar和jsf-impl-2.2.0-m05.jar是2.2.0-m05的单独JAR。

版本之间的差异可以在发行说明中找到,但2.2和2.1是非平凡的不同。