无法解析类型javax.servlet.ServletContext和javax.servlet.ServletException

我正在尝试将Spring Security包含到我的Web项目中,我正在按照本教程http://docs.spring.io/spring-security/site/docs/current/guides/html5//helloworld.html

我已经用给定的maven项目完成了教程中的所有内容并且工作正常。 但是当我试图将它包含在我的项目中时,会出现编译错误。 特别是当我从AbstractSecurityWebApplicationInitializer扩展时出现给定的错误

代码有错误

浮动编译错误

此行有多个标记

  • 无法解析javax.servlet.ServletContext类型。 它是从所需的.class文件间接引用的
  • 无法解析类型javax.servlet.ServletException。 它是从所需的.class文件间接引用的

POM.xml

  4.0.0 spring.primefaces primefaces.testwebapp 0.0.1-SNAPSHOT war SpringPrimefacesWebApp    maven-compiler-plugin  1.7 1.7    maven-war-plugin 2.3  false        com.sun.faces jsf-api 2.2.11   com.sun.faces jsf-impl 2.2.11    org.primefaces primefaces 5.2    org.springframework.security spring-security-web 4.0.1.RELEASE   org.springframework.security spring-security-config 4.0.1.RELEASE      org.springframework spring-framework-bom 4.1.6.RELEASE pom import    

谢谢您的帮助!

使用mvn clean install -U

在此处输入图像描述

只需将javax.servlet API添加到编译时依赖项中。 您不需要将它包含在构建中,它已由目标servlet容器提供。

您当前的pom建议您部署到准系统servlet容器( Tomcat , Jetty等)而不是完整的Java EE应用程序服务器( WildFly , TomEE , GlassFish , Liberty等),否则您将遇到类加载通过提供JSF和webapp而不是使用容器提供的麻烦来解决相关的问题。

在这种情况下,添加以下依赖项应该适用于像Tomcat 8这样的Servlet 3.1容器:

  javax.servlet javax.servlet-api 3.1.0 provided  

或者如果您实际上是针对像Tomcat 7这样的旧版Servlet 3.0容器,请将更改为3.0.1 (注意:由于他们的错误而没有3.0 )。

如果您碰巧实际部署到WildFly 8等Java EE 7应用程序服务器,请改用以下依赖项。 它涵盖了整个Java EE API ,包括javax.servlet (和javax.faces ,因此您将删除那些单独的JSF API / impl依赖项):

  javax javaee-api 7.0 provided  

此外,如果您的目标是JBoss AS 7之类的旧Java EE 6应用程序服务器,请将更改为6.0

这对我有用:如果上面提供的解决方案不起作用项目>属性> Java构建路径>库>从库选项卡添加库>选择服务器运行时>下一步>选择Apache Tomcat v 7.0>完成>确定

尝试设置更新的父级,如下所示:

  org.springframework.boot spring-boot-starter-parent 1.3.6.RELEASE   

这解决了我。

对我有帮助的是删除目录.m2中的存储库以及删除run maven:package之后的存储库