Tuve el mismo síntoma con una cura diferente. Intenté actualizar mi aplicación web JSF 2.2.4 / Spring 3.0 a JSF 2.3 para disfrutar de los nuevos enganches JSF websocket allí y Eclipse (en realidad STS) no cooperaría. En Project Facets de Eclipse, JSF 2.3 nunca estuvo disponible hasta que edité directamente el archivo org.eclipse.wst.common.project.facet.core.xml como se indicó en las respuestas anteriores: el máximo que alcanzaría fue 2.2.
Aquí están los aros por los que salté. No sé si todo esto era necesario porque básicamente no entiendo toda esta configuración.
En Eclipse recibí con frecuencia una advertencia aterradora: "Modificar un proyecto facetado cuando las implementaciones de una o más facetas instaladas no están disponibles puede resultar en un proyecto dañado. ¿Está seguro de que desea continuar?" Esto me llevó a hacer compromisos más frecuentes, pero no se produjo corrupción.
- Actualice JDK de 1.7 a 1.8 en POM, compilador de Eclipse y facetas de proyecto de Eclipse.
Actualice las siguientes dependencias de Maven:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... a:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... y ...
<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>
... a:
<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>
Tuve que actualizar mis declaraciones de espacio de nombres web.xml desde:
<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">
... a:
<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">
Tuve que actualizar Project Facets -> Dynamic Web Module de 2.5 a 3.0. Intenté 3.1 pero obtuve errores.
En este proceso frecuentemente recibí el error en el título de esta publicación, "No se puede cambiar la versión del módulo web dinámico de faceta de proyecto a 3.0" y Eclipse se negó a compilar el proyecto u ofrecer JSF 2.3 en las facetas del proyecto. Cuando edité el archivo org.eclipse.wst.common.project.facet.core.xml según lo indicado, los errores desaparecieron, Eclipse ofreció JSF 2.3 en Project Facets, y el proyecto se compiló y funcionó bien en Tomcat 9.0.8. Sin embargo, Project Facets todavía advirtió "No se pudo encontrar la implementación de la versión 2.3 del proyecto facet jst.jsf. La funcionalidad será limitada". Sospecho que esto simplemente significa que el autocompletado y otras comodidades de Eclipse no estarán disponibles porque no puede encontrar la implementación de JSF 2.3 declarada en mi POM.
Espero que esto ayude a alguien. Las búsquedas en Google arrojaron solo esta publicación de Ali Bassam e indirectamente BalusC que ayudó.