it-swarm.com.de

Der Typ javax.servlet.ServletContext und javax.servlet.ServletException kann nicht aufgelöst werden

Ich versuche Spring Security in mein Webprojekt einzubinden. Ich folge diesem Tutorial http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html

Ich habe alles im Tutorial mit dem angegebenen Maven-Projekt gemacht und funktioniert gut. Wenn ich jedoch versuche, es in mein Projekt aufzunehmen, wird ein Kompilierungsfehler angezeigt. Insbesondere wenn i von AbstractSecurityWebApplicationInitializer ausgeht, wird der angegebene Fehler angezeigt

Code with the error

The floating compilation error

Mehrere Marker in dieser Zeile

  • Der Typ javax.servlet.ServletContext kann nicht aufgelöst werden. Es wird indirekt auf erforderliche .class-Dateien verwiesen
  • Der Typ javax.servlet.ServletException kann nicht aufgelöst werden. Es wird indirekt auf erforderliche .class-Dateien verwiesen

Die 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>

Danke für die Hilfe!

Verwenden von mvn clean install -U 

enter image description here

19
Amaury Esparza

Fügen Sie einfach die javax.servlet-API zu den Abhängigkeiten der Kompilierzeit hinzu. Sie müssen es nicht in den Build einschließen, es wird bereits vom Zielservlet-Container bereitgestellt.

Ihr aktuelles Pom legt nahe, dass Sie die Bereitstellung in einem Barebones-Servlet-Container ( Tomcat , Jetty usw.) anstelle eines vollwertigen Java EE-Anwendungsservers ( WildFly , TomEE , GlassFish , Liberty etc usw., sonst hätten Sie Probleme mit dem Klassenladen gehabt, indem Sie JSF zusammen mit der Webanwendung bereitstellen, anstatt den vom Container bereitgestellten zu verwenden. 

In diesem Fall sollte das Hinzufügen der folgenden Abhängigkeit für einen Servlet 3.1 Container wie Tomcat 8 gelten: 

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

Wenn Sie tatsächlich einen älteren Servlet 3.0 Container wie Tomcat 7 anvisieren, ändern Sie <version> in 3.0.1 (Hinweis: Es gibt keinen 3.0 aufgrund eines Fehlers auf ihrer Seite).

Wenn Sie tatsächlich auf einem Java EE 7 Anwendungsserver wie WildFly 8 implementieren, verwenden Sie stattdessen die folgende Abhängigkeit. Es deckt die gesamte Java EE-API ab, einschließlich javax.servlet (und javax.faces), sodass Sie diese individuellen JSF-API/impl-Abhängigkeiten entfernen.

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

Wenn Sie einen älteren Java EE 6 Anwendungsserver wie JBoss AS 7 als Ziel verwenden, ändern Sie auch hier <version> in 6.0.

50
BalusC

Dies funktionierte für mich: Wenn die oben angegebene Lösung nicht funktioniert Projekt> Eigenschaften> Java-Erstellungspfad> Bibliotheken> Bibliothek über Bibliothek hinzufügen> Serverlaufzeit auswählen> Weiter> Apache Tomcat v 7.0 wählen> Fertig stellen> OK

5
Dila Gurung

stellen Sie das aktualisierte übergeordnete Element folgendermaßen ein:

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

das für mich gelöst. 

0
Digao

Was für mich geholfen hat, war das Löschen des Repositorys im Verzeichnis .m2 .__

0
AlieneilA