2015-06-09 9 views
14

aufgelöst werden Ich versuche, Spring Security zu meinem Web-Projekt zu schließen, ich dieses Tutorial folgenden bin http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.htmlDer Typ javax.servlet.ServletContext und javax.servlet.ServletException kann nicht

ich alles in das getan habe Tutorial mit dem gegebenen Maven-Projekt und funktioniert gut. Aber wenn ich versuche, es in mein Projekt aufzunehmen, erscheint ein Kompilierungsfehler. Insbesondere, wenn i reicht von AbstractSecurityWebApplicationInitializer erscheinen den gegebenen Fehler

Code with the error

The floating compilation error

Mehrere Marker an dieser Linie

  • Der Typ javax.servlet.ServletContext kann nicht aufgelöst werden. Es wird indirekt von erforderlichen .class-Dateien referenziert
  • Der Typ javax.servlet.ServletException kann nicht aufgelöst werden. Es wird indirekt von erforderlichen .class-Dateien

referenzierten 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!

Mit mvn sauber -U

enter image description here

+0

Ohne die relevanten Teile Ihrer pom. –

+0

Sorry, ich habe gerade den kompletten Pom hochgeladen. –

+0

Befehl von der Eingabeaufforderung aus ausführen (aus dem Verzeichnis ausführen, in dem POM gespeichert ist). mvn clean install -U. Wenn das nicht funktioniert, überprüfe die Datei apache-maven-3.3.1 \ conf \ settings.xml für den Repository-Pfad –

Antwort

34

Fügen Sie einfach den javax.servlet API der Kompilierung Abhängigkeiten installieren. Sie müssen es nicht in den Build einschließen, da es bereits vom Ziel-Servlet-Container bereitgestellt wird.

Ihre aktuellen pom lässt vermuten, dass Sie zu einem Barebone-Servlet-Container sind die Bereitstellung von (, Jetty, usw.) anstelle eines vollwertigen Java EE Application Server (WildFly, TomEE, GlassFish, Liberty, etc), sonst würden Sie haben Probleme mit Classloading-Problemen verursacht, indem Sie JSF zusammen mit der Webanwendung zur Verfügung gestellt haben, anstatt die vom Container bereitgestellte zu verwenden.

In diesem Fall die unten Abhängigkeit Zugabe sollte wie Tomcat 8 für einen Servlet 3.1 Behälter tun:

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

Oder wenn Sie ein älteren Servlet 3.0 Container wie Tomcat 7 tatsächlich Targeting sind, die 3.0.1<version> ändern (Hinweis: Es gibt keine 3.0 aufgrund eines Fehlers auf ihrer Seite).

Wenn Sie tatsächlich einen Anwendungsserver wie WildFly 8 auf einem Java EE 7-Server bereitstellen, verwenden Sie stattdessen die folgende Abhängigkeit.Es deckt die gesamten Java EE API, einschließlich javax.servlet (und javax.faces, so dass man dann die einzelnen JSF API/impl Abhängigkeiten entfernen würde):

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

Auch hier, wenn Sie ein älteren Java EE 6 Anwendungsserver wie JBoss AS Targeting sind 7, ändern Sie die <version> zu 6.0.

+0

Dies sollte helfen @Amaury Esparza –

+0

Danke, Hinzufügen von Abhängigkeit in Pom-Datei ist hilfreich – asifaftab87

+0

sehr nützlich, vielen Dank – ashkanr

4

Das ist für mich gearbeitet: wenn über doesnt gelieferte Lösung Arbeit Projekt> Eigenschaften> Java Build Path> Bibliotheken> Bibliothek aus der Bibliothek Registerkarte hinzufügen> Wählen Sie Server Runtime> Weiter> wählen Apache Tomcat v 7.0> Finish> Ok

0

versuchen, die aktualisierte Mutter Einstellung wie folgt aus:

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

dies für mich gelöst.

0

Was für mir geholfen wurde das Repository im Verzeichnis .m2 und nach dem Löschen Lauf Maven Löschen: Paket zu diagnostizieren, es ist schwer

Verwandte Themen