web-dev-qa-db-fra.com

Les types javax.servlet.ServletContext et javax.servlet.ServletException ne peuvent pas être résolus

J'essaie d'inclure Spring Security à mon projet Web. Je suis ce tutoriel http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html

J'ai tout fait dans le tutoriel avec le projet Maven donné et ça fonctionne bien. Mais lorsque j'essaie de l'inclure dans mon projet, une erreur de compilation apparaît. Plus précisément, lorsque i s'étend de AbstractSecurityWebApplicationInitializer, apparaît l'erreur donnée

Code with the error

The floating compilation error

Plusieurs marqueurs à cette ligne

  • Le type javax.servlet.ServletContext ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis
  • Le type javax.servlet.ServletException ne peut pas être résolu. Il est indirectement référencé à partir des fichiers .class requis

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

Merci pour l'aide!

Utiliser mvn clean install -U 

enter image description here

19
Amaury Esparza

Ajoutez simplement l'API javax.servlet aux dépendances temporelles de la compilation. Vous n'avez pas besoin de l'inclure dans la construction, elle est déjà fournie par le conteneur de servlet cible.

Votre pom actuel suggère que vous déployez dans un conteneur de servlets barebones ( Tomcat , Jetty , etc.) au lieu d'un serveur d'applications Java EE à part entière ( WildFly , TomEE , GlassFish , Liberty , etc.), sinon vous auriez rencontré des problèmes liés au chargement de classes en fournissant JSF avec l'application Web au lieu d'utiliser celle fournie par le conteneur. 

Dans ce cas, l'ajout de la dépendance ci-dessous devrait s'appliquer à un conteneur Servlet 3.1 tel que Tomcat 8: 

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

Ou, si vous ciblez un ancien conteneur Servlet 3.0 comme Tomcat 7, remplacez le <version> par 3.0.1 (remarque: il n'y a pas de 3.0 en raison d'une erreur de leur part).

Si vous déployez réellement sur un serveur d'applications Java EE 7 tel que WildFly 8, utilisez plutôt la dépendance ci-dessous. Elle couvre l'ensemble de l'API Java EE , y compris javax.servlet (et javax.faces, de sorte que vous devez ensuite supprimer ces dépendances API/impl. JSF individuelles):

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

Ici aussi, si vous ciblez un ancien serveur d'applications Java EE 6 tel que JBoss AS 7, remplacez <version> par 6.0.

50
BalusC

Cela fonctionnait pour moi: si la solution fournie ci-dessus ne fonctionnait pas Projet> Propriétés> Chemin de construction Java> Bibliothèques> Ajouter une bibliothèque à partir de l'onglet Bibliothèque> Choisir le serveur d'exécution> Suivant> Choisir Apache Tomcat v 7.0> Terminer> Ok

5
Dila Gurung

essayez de définir le parent mis à jour, comme ceci:

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

cela a résolu pour moi. 

0
Digao

Ce qui m'a aidé a été de supprimer le référentiel du répertoire .m2 Et après la suppression, exécutez maven: package

0
AlieneilA