У мене був той самий симптом з іншим лікуванням. Я намагався модернізувати свій веб-розетку JSF 2.2.4 / Spring 3.0 до JSF 2.3, щоб насолодитися новими гачками веб-розетки JSF, і Eclipse (фактично STS) не співпрацює. У проектних гранях Eclipse JSF 2.3 ніколи не став доступним, поки я не редагував безпосередньо файл org.eclipse.wst.common.project.facet.core.xml, як вказано в попередніх відповідях - найвищий показник - 2,2.
Ось обручі, через які я стрибнув. Я не знаю, що все це було потрібно, тому що я принципово не розумію всю цю конфігурацію.
У програмі Eclipse я часто отримував жахливе попередження: "Зміна фацетного проекту, коли реалізація однієї або декількох встановлених граней недоступна, потенційно може призвести до пошкодження проекту. Ви впевнені, що хочете продовжувати роботу?" Це змусило мене робити більш часті вчинки, але корупції не сталося.
- Оновіть JDK з 1,7 до 1,8 у POM, компіляторі Eclipse та Eclipse Project Facets.
Оновіть такі залежності Maven:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
... до:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
... і ...
<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>
... до:
<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>
Мені довелося оновити свої декларації про простір імен web.xml з:
<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">
... до:
<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">
Мені довелося оновити Project Faces -> Динамічний веб-модуль від 2,5 до 3,0. Я спробував 3.1, але отримав помилки.
У цьому процесі я часто отримував помилку в заголовку цієї публікації: "Не вдається змінити версію динамічного веб-модуля проекту на 3.0" і Eclipse відмовився складати проект або пропонувати JSF 2.3 у проектних гранях. Коли я відредагував файл org.eclipse.wst.common.project.facet.core.xml, то помилки зникли, Eclipse запропонував JSF 2.3 у проектних гранях, і проект скомпілювався та працював нормально на Tomcat 9.0.8. Однак Фасетки проекту все ж попереджали: "Не вдалося знайти реалізацію версії 2.3 проекту facet jst.jsf. Функціональність буде обмежена." Я підозрюю, що це просто означає, що автозаповнення та інші зручності Eclipse будуть недоступні, оскільки він не може знайти реалізацію JSF 2.3, заявлену в моїй POM.
Сподіваюся, що це комусь допоможе. Пошуки Google дали лише цю посаду Алі Бассам та опосередковано BalusC, що допомогло.