您的位置:首页 > 编程语言 > Java开发

maven解决servlet-api-2.3冲突问题

2016-07-22 19:51 501 查看

背景:

最近在maven一程序打包发布,报错如下错误

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 23 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


经分析, servlet-api.jar和tomcat出现冲突, 删除之,则ok。

然而奇怪的是,本人的项目是用Maven管理,而且用到了servlet3.0的技术,但是项目中用到servlet3.0的地方, 为什么打包发布后总是servlet-api-2.3。

解决方法:

网上都说servlet-api冲突是因为项目部署的时候WEB-INFO/lib下面的servlet-api和servlet中的servlet-api产生冲突,其实我的不然。因为我的项目是用maven管理的,在pom.xml中配置包依赖的时候配置了commons-logging包的依赖,而commons-logging包又依赖于servlet-api2.3,因此我认为servlet-api2.3把3.0版本给冲掉了。解决办法如下:

dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api-2.5</artifactId>
<version>6.1.14</version>
<scope>provided</scope>
</dependency>


或者:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  maven jsp class java servlet