2015-06-09 17 views
14

Sto cercando di includere Primavera di sicurezza al mio progetto web, sto seguendo questo tutorial http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.htmlIl tipo javax.servlet.ServletContext e javax.servlet.ServletException non può essere risolto

Ho fatto tutto nella tutorial con il progetto maven dato e funziona bene. Ma quando sto provando ad includerlo nel mio progetto appare un errore di compilazione. In particolare quando i estende dal AbstractSecurityWebApplicationInitializer visualizzato il dato di errore

Code with the error

The floating compilation error

marcatori multipli in questa linea

  • Il tipo javax.servlet.ServletContext non può essere risolto. Fa riferimento indirettamente ai file .class richiesti
  • Il tipo javax.servlet.ServletException non può essere risolto. Si è indirettamente riferimento dal file .class richiesti

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

Grazie per l'aiuto!

Utilizzando mvn installazione pulita -U

enter image description here

+0

Senza le porzioni rilevanti del vostro pom è difficile da diagnosticare. –

+0

Mi dispiace, ho appena caricato il pom completo. –

+0

esegue il comando dal prompt dei comandi (eseguito dalla directory in cui viene tenuto POM). mvn clean install -U. Se questo non funziona controlla il file apache-maven-3.3.1 \ conf \ settings.xml per il percorso del repository –

risposta

34

basta aggiungere il javax.servlet API alle dipendenze momento della compilazione. Non è necessario includerlo nella compilazione, è già fornito dal contenitore servlet di destinazione.

vostro pom corrente suggerisce che si sta distribuendo ad un contenitore di servlet barebone (, Jetty, ecc) invece di un vero e proprio pieno di server Java EE applicazione (WildFly, TomEE, GlassFish, Liberty, ecc), altrimenti ci si avere incontrato problemi legati al classloading fornendo JSF insieme alla webapp invece di usare quella fornita dal container.

In tal caso, l'aggiunta della dipendenza di seguito dovrebbe fare per un contenitore Servlet 3.1 come Tomcat 8:

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

Oppure, se siete in realtà l'obiettivo di una più vecchia contenitore Servlet 3.0 come Tomcat 7, modificare il <version>-3.0.1 (nota: non c'è lo 3.0 a causa di un errore dalla loro parte).

Se per caso si esegue la distribuzione su un server delle applicazioni Java EE 7 come WildFly 8, utilizzare invece la dipendenza sottostante.Esso copre l'intera Java EE API, tra cui javax.servlet (e javax.faces, quindi faresti quindi rimuovere quei singoli JSF dipendenze API/impl):

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

Anche qui, se ci si rivolge un server Java EE 6 vecchia applicazione come JBoss AS 7, modificare <version> in 6.0.

+0

Questo dovrebbe aiutare @Amaury Esparza –

+0

Grazie, aggiungere dipendenza nel file pom è utile – asifaftab87

+0

molto utile, grazie molto – ashkanr

4

questo ha funzionato per me: se la soluzione sopra fornita pretende molto lavoro Progetto> Proprietà> Java Build Path> Biblioteche> Aggiungi libreria dalla scheda Libreria> Scegliere runtime server> Avanti> scegliere Apache Tomcat v 7.0> Fine> Ok

0

provate ad impostare il genitore aggiornato, in questo modo:

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

questo ha risolto per me.

0

Quello che ha aiutato per me era la cancellazione del repository nella directory .m2 e dopo l'eliminazione di Maven esecuzione: pacchetto

Problemi correlati