无法解析类型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之后的存储库