Maven使用Tomcat热启动问题:java.lang.LinkageError: loader constraint violation

这几天做了一个简单的javaweb的helloworld,使用了maven的依赖,并且使用了tomcat的热启动,但是每次mvn tomcat:run都会报一个错误如下:

    HTTP Status 500 - java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"

type Exception report

message java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different type with name "javax/servlet/http/HttpServletRequest"
    java.lang.Class.getDeclaredMethods0(Native Method)
    java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    java.lang.Class.getDeclaredMethods(Class.java:1975)
    org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:127)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:172)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.

Apache Tomcat/7.0.47

这是由于tomcat里的jar冲突,这里困惑了我很久,我的依赖为

<dependencies>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
            <version>3.0.1version>
            <scope>providedscope>
        dependency>
        <dependency>
            <groupId>javax.servlet.jspgroupId>
            <artifactId>jsp-apiartifactId>
            <version>2.2version>
            <scope>providedscope>
        dependency>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>jstlartifactId>
            <version>1.2version>
            <scope>providedscope>
        dependency>

    dependencies>
都使用了provided,按理来说,不会出现任何问题,但是今天我在用eclipse做项目时,突然想到以前的一个问题,就是我的tomcat版本换了,造成无法使用servlet-api.jar这个包.我记得是在网上找了个案例,将servlet-api.jar放到jre里的lib包下的ext文件下,果然解决了问题,这也是我造成目前的蛋疼问题,jre里的servlet-api和tomcat里的servlet-api冲突了!!!所以我立刻到java安装目录下删掉了那个servlet-api.问题解决,所以这里,如果你们也出现了类似问题,可以去找一找jre里的jar包和tomcat里的jar包是否冲突了,

你可能感兴趣的:(解决BUG)