Невозможно разрешить тип javax.servlet.ServletContext и javax.servlet.ServletException

Я пытаюсь включить Spring Security в свой веб-проект, я следую этому руководству http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html

Я сделал все в учебнике с данным проектом maven и отлично работает. Но когда я пытаюсь включить его в свой проект, появляется ошибка компиляции. В частности, когда я выходит из AbstractSecurityWebApplicationInitializer появляется данная ошибка

Code with the error

The floating compilation error

Несколько маркеров на этой линии

  • Тип javax.servlet.ServletContext не может быть разрешен. Это косвенно ссылается на требуемые файлы.class
  • Тип javax.servlet.ServletException не может быть разрешен. Это косвенно ссылается на требуемые файлы.class

POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring.primefaces</groupId>
<artifactId>primefaces.testwebapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringPrimefacesWebApp</name>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <!-- JSF 2.2 core and implementation -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.11</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.11</version>
    </dependency>
    <!-- Prime Faces -->
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>5.2</version>
    </dependency>
    <!-- Spring security -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.0.1.RELEASE</version>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.1.6.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Спасибо за помощь!

Использование mvn clean install -U

enter image description here

Ответ 1

Просто добавьте API javax.servlet к зависимостям времени компиляции. Вам не нужно включать его в сборку, она уже предоставляется целевым контейнером сервлета.

Ваш текущий pom предполагает, что вы развертываете в контейнер сервлетов barebones (Tomcat, Jetty и т.д.) Вместо полноценного сервера приложений Java EE (WildFly, TomEE, GlassFish, Liberty и т.д.), Иначе вы столкнулись бы с загрузкой классов связанные с безопасностью, предоставляя JSF вместе с webapp вместо использования контейнера.

В этом случае добавление указанной ниже зависимости должно выполняться для контейнера Servlet 3.1, такого как Tomcat 8:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

Или, если вы на самом деле нацелились на более старый контейнер Servlet 3.0, такой как Tomcat 7, измените <version> на 3.0.1 (обратите внимание: там нет 3.0 из-за ошибки на их стороне).

Если вы фактически развертываете сервер приложений Java EE 7, например WildFly 8, используйте вместо этого зависимость ниже. Он охватывает весь API Java EE, включая javax.servletjavax.faces, поэтому вы удаляете эти отдельные зависимости JSF API/impl):

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

Также здесь, если вы ориентируетесь на более старый сервер приложений Java EE 6, такой как JBoss AS 7, измените <version> на 6.0.

Ответ 2

Это сработало для меня: если вышеприведенное решение не работает Project> Свойства> Путь сборки Java> Библиотеки> Добавить библиотеку с вкладки библиотеки> Выберите время выполнения сервера> Далее> выберите Apache Tomcat v 7.0> Finish> Ok

Ответ 3

попробуйте установить обновленный родительский элемент, например:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.6.RELEASE</version>
    <relativePath></relativePath>
</parent>

это решило для меня.

Ответ 4

Для меня помогло удалить репозиторий в каталоге.m2 и после удаления run maven: package