关于Maven:com.sun.faces的差异/相等> jsf-impl和org.glassfish> javax.faces(2.2.4)

Difference/Equality of com.sun.faces > jsf-impl and org.glassfish > javax.faces (2.2.4)

在我的JSF2应用程序中,我遇到了Primefaces(5.1)自动完成中的NPE

org.primefaces.component.autocomplete.AutoCompleteRenderer
.encodeSuggestionsAsList(AutoCompleteRenderer.java:492)

我已经通过替换Maven依赖关系解决了我的问题

1
2
3
4
5
<dependency>
    <groupId>com.sun.faces</groupId>
    jsf-impl</artifactId>
    <version>2.2.4</version>
</dependency>

通过

1
2
3
4
5
<dependency>
    <groupId>org.glassfish</groupId>
    javax.faces</artifactId>
    <version>2.2.4</version>
</dependency>

这让我感到困惑。

在搜索项目主页时,我找到了以下Maven存储库:

http://mvnrepository.com/artifact/com.sun.faces/jsf-impl/2.2.4
http://mvnrepository.com/artifact/org.glassfish/javax.faces/2.2.4

他们都声明与首页相同的描述并引用相同的URL:

说明:Oracle对JSF 2.2规范的实现(2.2.4)
主页:http://java.sun.com/javaee/javaserverfaces/

有人可以解释差异吗? 难道不应该完全一样吗?

提示:我了解sun和Oracle的历史。 ;)


com.sun.faces:jsf-impl仅包含实现(Mojarra)。 它缺少API。你需要一个com.sun.faces:jsf-api一起吧。

org.glassfish:javax.faces是包含API和impl的单JAR捆绑包(您也可以按文件大小查看它)。

至于仅使用jsf-impl时的具体问题,显然您忘记了jsf-api,或者您在实际上使用像Tomcat这样的非Java EE容器时依赖了javax:javaee-web-api