2015-06-09 72 views
14

我想包括Spring Security的到我的web項目,我下面這個教程http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html類型javax.servlet.ServletContext和javax.servlet.ServletException解決不了

我已經在做了一切教程與給定的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全新安裝-U

enter image description here

+0

沒有你的POM的相關部分很難診斷。 –

+0

對不起,我剛剛上傳完整的pom。 –

+0

從命令提示符處執行命令(從POM保存的目錄執行)。 mvn乾淨安裝-U。如果這不起作用檢查存儲庫路徑的apache-maven-3.3.1 \ conf \ settings.xml文件 –

回答

34

只需將javax.servlet API添加到編譯時依賴。您不需要將其包含在構建中,它已經由目標servlet容器提供。

您當前的POM建議你部署到準系統servlet容器(,Jetty等),而不是一個完全成熟的Java EE應用服務器(WildFlyTomEEGlassFishLiberty等),否則你會通過提供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)。

如果您碰巧實際部署到像WildFly 8這樣的Java EE 7應用程序服務器,請改爲使用下面的依賴關係。它覆蓋了整個Java EE API,包括javax.servlet(和javax.faces,所以你再刪除這些個人JSF API/IMPL依賴):

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

而且在這裏,如果你的目標像JBoss AS舊的Java EE 6應用服務器7,將<version>更改爲6.0

+0

這應該有助於@Amaury Esparza –

+0

謝謝,在pom文件中添加依賴項很有幫助 – asifaftab87

+0

非常有用,謝謝了很多 – ashkanr

4

這個工作對我來說:如果上面提供的解決方案不起作用 項目>屬性> Java構建路徑>庫>從庫選項卡中添加庫>選擇服務器運行時>下一頁>選擇的Apache Tomcat v 7.0>完成>確定

0

嘗試設置更新的父級,如下所示:

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

這解決了我。

0

什麼幫助對我來說是刪除存儲庫目錄.m2目錄 和刪除運行Maven後:包