Ho avuto lo stesso sintomo con una cura diversa. Stavo cercando di aggiornare la mia webapp JSF 2.2.4 / Spring 3.0 a JSF 2.3 per godermi i nuovi hook di websocket JSF e Eclipse (in realtà STS) non avrebbe collaborato. Nelle Facet di progetto di Eclipse, JSF 2.3 non è mai stato disponibile fino a quando non ho modificato direttamente il file org.eclipse.wst.common.project.facet.core.xml come indicato nelle risposte precedenti: il massimo sarebbe stato 2.2.
Ecco i cerchi che ho passato. Non so che tutti questi erano necessari perché fondamentalmente non capisco tutta questa configurazione.
In Eclipse ho spesso ricevuto un avvertimento spaventoso, "La modifica di un progetto sfaccettato quando non sono disponibili implementazioni di uno o più sfaccettature installate può potenzialmente comportare un progetto danneggiato. Sei sicuro di voler procedere?" Questo mi ha spinto a fare commit più frequenti ma non si è verificata corruzione.
- Aggiorna JDK da 1.7 a 1.8 in POM, compilatore Eclipse e facce del progetto Eclipse.
Aggiorna le seguenti dipendenze Maven:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... per:
<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>
... per:
<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>
Ho dovuto aggiornare le mie dichiarazioni dello spazio dei nomi web.xml da:
<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">
... per:
<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">
Ho dovuto aggiornare Project Facets -> Dynamic Web Module dalla 2.5 alla 3.0. Ho provato 3.1 ma ho riscontrato degli errori.
In questo processo ho spesso ricevuto l'errore nel titolo di questo post, "Impossibile modificare la versione del modulo Web dinamico del facet del progetto su 3.0" ed Eclipse ha rifiutato di compilare il progetto o di offrire JSF 2.3 nelle facce del progetto. Quando ho modificato il file org.eclipse.wst.common.project.facet.core.xml come indicato, gli errori sono scomparsi, Eclipse ha offerto JSF 2.3 in Project Facets e il progetto è stato compilato e funzionava perfettamente su Tomcat 9.0.8. Tuttavia, le facce del progetto hanno ancora avvertito "L'implementazione della versione 2.3 del facet del progetto jst.jsf non è stata trovata. La funzionalità sarà limitata." Sospetto che ciò significhi semplicemente che il completamento automatico e altri vantaggi di Eclipse non saranno disponibili perché non riesce a trovare l'implementazione di JSF 2.3 dichiarata nel mio POM.
Spero che questo aiuti qualcuno. Le ricerche di Google hanno prodotto solo questo post di Ali Bassam e indirettamente BalusC che ha aiutato.