У меня был тот же симптом с другим лечением. Я пытался обновить свое веб-приложение 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.
Обновите следующие зависимости 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 Facets -> Dynamic Web Module с 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. Тем не менее, Project Facets по-прежнему предупреждает: «Не удалось найти реализацию версии 2.3 фасета проекта jst.jsf. Функциональность будет ограничена». Я подозреваю, что это просто означает, что автозаполнение и другие удобства Eclipse не будут доступны, потому что он не может найти реализацию JSF 2.3, объявленную в моем POM.
Надеюсь, это кому-нибудь поможет. Поиски в Google дали только этот пост Али Бассам и косвенно BalusC, который помог.