Miałem ten sam objaw z innym lekarstwem. Próbowałem zaktualizować moją aplikację JSF 2.2.4 / Spring 3.0 do JSF 2.3, aby móc korzystać z nowych haków Jss websocket i Eclipse (właściwie STS) nie będzie współpracować. W Eclipse's Project Facets JSF 2.3 nigdy nie stał się dostępny, dopóki nie edytowałem bezpośrednio pliku org.eclipse.wst.common.project.facet.core.xml zgodnie z wcześniejszymi odpowiedziami - najwyższy byłby 2,2.
Oto obręcze, przez które skoczyłem. Nie wiem, czy wszystkie były konieczne, ponieważ zasadniczo nie rozumiem całej tej konfiguracji.
W Eclipse często otrzymywałem przerażające ostrzeżenie: „Modyfikacja projektu aspektowego, gdy implementacje jednej lub więcej zainstalowanych aspektów nie są dostępne, może potencjalnie doprowadzić do uszkodzenia projektu. Czy na pewno chcesz kontynuować?” To skłoniło mnie do częstszych zatwierdzeń, ale nie doszło do uszkodzenia.
- Zaktualizuj JDK z 1.7 do 1.8 w POM, kompilatorze Eclipse i aspektach projektu Eclipse.
Zaktualizuj następujące zależności Maven:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... do:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... i ...
<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>
... do:
<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>
Musiałem zaktualizować deklaracje przestrzeni nazw web.xml z:
<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">
... do:
<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">
Musiałem zaktualizować Aspekty projektu -> Dynamiczny moduł internetowy z 2.5 do 3.0. Próbowałem 3.1, ale dostałem błędy.
W tym procesie często pojawia się błąd w tytule tego postu: „Nie można zmienić wersji aspektu projektu Dynamic Web Module na 3.0”, a Eclipse odmówił skompilowania projektu lub zaoferowania JSF 2.3 w aspektach projektu. Kiedy edytowałem plik org.eclipse.wst.common.project.facet.core.xml zgodnie z zaleceniami, błędy zniknęły, Eclipse zaoferował JSF 2.3 w Project Facets, a projekt skompilował się i działał poprawnie na Tomcat 9.0.8. Jednak Project Facets nadal ostrzegał: „Nie można znaleźć implementacji wersji 2.3 aspektu projektu jst.jsf. Funkcjonalność będzie ograniczona”. Podejrzewam, że oznacza to po prostu, że autouzupełnianie i inne udogodnienia Eclipse nie będą dostępne, ponieważ nie można znaleźć implementacji JSF 2.3 zadeklarowanej w mojej POM.
Mam nadzieję, że to komuś pomoże. Wyszukiwania Google przyniosły tylko ten post autorstwa Ali Bassam i pośrednio BalusC, co pomogło.