把公司的项目拷回家,想在自己的电脑上面接着做,结果在公司电脑上运行的好好的,在家里的笔记本上就出现了错误,在这里记录。
环境:eclipse juno(eclipse 4.2) ,tomcat 7,Maven 3
启动tomcat的项目报错如下:
解决思路:
1.看到这个错误,java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl,包名不同,类名相同,我首先想到的就是包冲突了,就是tomcat中的包与项目中的包冲突了。
2.在eclipse中找到这个类,Ctrl+Shift+T(这个快捷键是用来查找项目中的类,包括引用的jar文件中的类也会被找到,要与Ctrl+Shift+R区分开来),把ELContextImpl粘贴到搜索框里,
可以看到,这个类在这个包下。然后点击OK按钮,就会找到这个类所在的jar包:
到这里,我们就找到这个jar包了。下一步就是在pom里找到它的依赖,
3. 打开项目的pom.xml文件,打开Dependency Hierarchy选项卡,
幸运的是,我一下就找到了这个jar包,不幸运的是,通过截图可以看到,这个jar包的字体是灰色的,区别于上面那些黑色字体(log4j,mybatis,mybatis-spring,neethi)的jar包,灰色字体的jar包表示它是被间接引入到项目中。
如何在pom.xml中查找是哪个依赖间接引入了org.apache.jasper.glassfish***.jar,这个方法我就不知道了,有看到这个博客的大神,希望能够指点一二,再次不胜感谢。
好吧,我写博客的时候,大神还没有指导我。我就说下我解决的思路,双击这个jar,会打开一个页面显示关于这个jar包的pom信息,
通过截图,可以看到这个jar包的Group Id和它的parent中都有jetty的身影,所以我就直接到我的pom文件里找关于jetty的引用,
有两个关于jetty的引用,我选择的方法是删除其中一个,看看这个org.apache.jasper.glassfish***.jar还是否在项目中存在,最后确定是下面这个依赖引入的它。然后加上一段依赖排除的代码,这个包包就不在项目的引用中了。再次启动项目也成功了,呵呵呵......
问题解决,挺高兴。但是,心里还是有个疙瘩,感觉很难受。
再次希望看到这个博客的大神对我解决问题的思路,方法提出宝贵意见,不吝赐教,感谢感谢!