1. 程式人生 > >tomcat啟動報錯:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

tomcat啟動報錯:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

啟動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還是否在專案中存在,最後確定是下面這個依賴引入的它。然後加上一段依賴排除的程式碼,這個包包就不在專案的引用中了。再次啟動專案也成功了,呵呵呵......