我有同样的症状,但用了不同的治疗方法。我试图将我的 JSF 2.2.4/Spring 3.0 webapp 升级到 JSF 2.3,以便在那里享受新的 JSF websocket 钩子,而 Eclipse(实际上是 STS)不会合作。在 Eclipse 的 Project Facets 中,JSF 2.3 一直不可用,直到我按照之前的答案直接编辑了 org.eclipse.wst.common.project.facet.core.xml 文件——它的最高版本是 2.2。
这是我跳过的圈子。我不知道所有这些都是必要的,因为我根本不了解所有这些配置。
在 Eclipse 中,我经常收到一个可怕的警告,“当一个或多个已安装的构面的实现不可用时修改构面项目可能会导致项目损坏。您确定要继续吗?”这促使我进行更频繁的提交,但没有发生损坏。
- 在 POM、Eclipse 编译器和 Eclipse Project Facets 中将 JDK 从 1.7 升级到 1.8。
-
更新以下 Maven 依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
...到:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
...和...
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.4</version>
</dependency>
...到:
<dependency>
<groupId>javax.faces</groupId>
<artifactId>javax.faces-api</artifactId>
<version>2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
</dependency>
我必须从以下位置更新我的 web.xml 命名空间声明:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
...到:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
我不得不将 Project Facets -> Dynamic Web Module 从 2.5 更新到 3.0。我尝试了 3.1,但出现错误。
在此过程中,我经常收到这篇文章标题中的错误“无法将项目构面动态 Web 模块的版本更改为 3.0”,并且 Eclipse 拒绝编译项目或在项目构面中提供 JSF 2.3。当我按照指示编辑 org.eclipse.wst.common.project.facet.core.xml 文件时,错误消失了,Eclipse 在 Project Facets 中提供了 JSF 2.3,并且项目在 Tomcat 9.0.8 上编译并运行良好。但是,Project Facets 仍然警告“无法找到 project facet jst.jsf 的 2.3 版本的实现。功能将受到限制。”我怀疑这只是意味着自动完成和其他 Eclipse 便利将不可用,因为它找不到在我的 POM 中声明的 JSF 2.3 实现。
希望这对某人有所帮助。 Google 搜索只产生了 Ali Bassam 的 this post 和间接帮助的 BalusC。