Eu tive o mesmo sintoma com uma cura diferente. Eu estava tentando atualizar meu webapp JSF 2.2.4 / Spring 3.0 para JSF 2.3, a fim de aproveitar os novos ganchos de soquete web JSF lá e o Eclipse (na verdade STS) não cooperaria. No Project Facets do Eclipse, o JSF 2.3 nunca se tornou disponível até que eu editei diretamente o arquivo org.eclipse.wst.common.project.facet.core.xml, conforme indicado nas respostas anteriores - o valor mais alto seria 2,2.
Aqui estão os aros pelos quais eu pulei. Não sei se tudo isso foi necessário porque fundamentalmente não entendo toda essa configuração.
No Eclipse, recebia frequentemente um aviso assustador: "Modificar um projeto facetado quando implementações de uma ou mais facetas instaladas não estão disponíveis pode resultar em um projeto corrompido. Tem certeza de que deseja continuar?" Isso me levou a fazer confirmações mais frequentes, mas nenhuma corrupção ocorreu.
- Atualize o JDK de 1,7 para 1,8 no POM, no compilador Eclipse e nas facetas do projeto Eclipse.
Atualize as seguintes dependências do Maven:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... para:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... e ...
<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>
... para:
<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>
Eu tive que atualizar minhas declarações de namespace web.xml de:
<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">
... para:
<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">
Eu tive que atualizar as facetas do projeto -> Dynamic Web Module de 2.5 para 3.0. Eu tentei 3.1, mas obtive erros.
Nesse processo, frequentemente recebi o erro no título desta postagem, "Não é possível alterar a versão da faceta do projeto Dynamic Web Module para 3.0" e o Eclipse se recusou a compilar o projeto ou oferecer o JSF 2.3 nas facetas do projeto. Quando editei o arquivo org.eclipse.wst.common.project.facet.core.xml conforme os erros desapareceram, o Eclipse ofereceu o JSF 2.3 no Project Facets e o projeto compilou e executou bem no Tomcat 9.0.8. No entanto, as Facetas do projeto ainda avisavam "Não foi possível encontrar a implementação da versão 2.3 da faceta do projeto jst.jf. A funcionalidade será limitada." Eu suspeito que isso significa simplesmente que o preenchimento automático e outras conveniências do Eclipse não estarão disponíveis porque não pode encontrar a implementação do JSF 2.3 declarada no meu POM.
Espero que isso ajude alguém. As pesquisas do Google renderam apenas este post de Ali Bassam e indiretamente BalusC, que ajudou.