Ich hatte das gleiche Symptom mit einer anderen Heilung. Ich habe versucht, meine JSF 2.2.4 / Spring 3.0-Webanwendung auf JSF 2.3 zu aktualisieren, um die neuen JSF-Websocket-Hooks dort zu genießen, und Eclipse (eigentlich STS) würde nicht kooperieren. In den Projektfacetten von Eclipse wurde JSF 2.3 erst verfügbar, als ich die Datei org.eclipse.wst.common.project.facet.core.xml direkt bearbeitet habe, wie in den vorherigen Antworten angegeben - der höchste Wert war 2.2.
Hier sind die Reifen, durch die ich gesprungen bin. Ich weiß nicht, dass all dies notwendig war, weil ich diese Konfiguration grundsätzlich nicht verstehe.
In Eclipse wurde häufig die beängstigende Warnung angezeigt: "Das Ändern eines facettierten Projekts, wenn Implementierungen einer oder mehrerer installierter Facetten nicht verfügbar sind, kann möglicherweise zu einem beschädigten Projekt führen. Möchten Sie wirklich fortfahren?" Dies veranlasste mich zu häufigeren Commits, aber es trat keine Korruption auf.
- Aktualisieren Sie JDK von 1.7 auf 1.8 in POM-, Eclipse-Compiler- und Eclipse-Projektfacetten.
Aktualisieren Sie die folgenden Maven-Abhängigkeiten:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... zu:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... und ...
<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>
... zu:
<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>
Ich musste meine web.xml-Namespace-Deklarationen aktualisieren von:
<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">
... zu:
<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">
Ich musste Project Facets -> Dynamic Web Module von 2.5 auf 3.0 aktualisieren. Ich habe 3.1 ausprobiert, aber Fehler bekommen.
In diesem Prozess wurde häufig der Fehler im Titel dieses Beitrags "Version des dynamischen Webmoduls der Projektfacette kann nicht auf 3.0 geändert werden" angezeigt, und Eclipse lehnte es ab, das Projekt zu kompilieren oder JSF 2.3 in den Projektfacetten anzubieten. Als ich die Datei org.eclipse.wst.common.project.facet.core.xml wie angegeben bearbeitete, verschwanden die Fehler, Eclipse bot JSF 2.3 in Project Facets an, und das Projekt wurde kompiliert und lief unter Tomcat 9.0.8 einwandfrei. Project Facets warnte jedoch weiterhin: "Die Implementierung von Version 2.3 der Projektfacette jst.jsf wurde nicht gefunden. Die Funktionalität wird eingeschränkt." Ich vermute, dies bedeutet einfach, dass die automatische Vervollständigung und andere Eclipse-Funktionen nicht verfügbar sind, da die in meinem POM deklarierte JSF 2.3-Implementierung nicht gefunden werden kann.
Hoffe das hilft jemandem. Google-Suchanfragen ergaben nur diesen Beitrag von Ali Bassam und indirekt BalusC, der half.