Tomcat - ClassFormatException的解決方法


問題與分析

在使用Tomcat7運行web項目時報錯如下:

嚴重: Compilation error
org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
at ....

仔細查看了報錯的堆棧信息,發現基本說的都是無法編譯jsp的錯誤。百度了一番,才明白原來是因為Tomcat7和jdk8存在着不兼容的情況。Tomcat通過ecj.jar來編譯jsp,這個ecj是Eclipse自己開發和使用的針對Java的編譯器。

ecj即the Eclipse Compiler for Java,Eclipse並沒有使用JDK自帶的編譯器,而是使用自己開發的ecj編譯器,而ecj也通過了java的驗證。除了Eclipse之外,Tomcat也用到了ecj,用於動態編譯jsp文件,可以在Tomcat的lib目錄下找到該jar包。

而這個ClassFormatException,就是因為Tomcat7使用的ecj.jar版本比較低,里邊使用的是較低版本的jdk,導致無法在jdk8的環境下去編譯jsp文件。

解決方案

方案一

既然是Tomcat7和jdk8不兼容導致的,那么我們只要使用Tomcat8或者jdk7自然就沒這個問題了。如果希望還是使用Tomcat7和jdk8來運行項目,就需要使用方案二了。

方案二

將Tomcat7的lib目錄下的ecj.jar換成Tomcat8里邊的ecj.jar,比如說將ecj3.7.2換成ecj.4.4.2,這樣就可以讓Tomcat7和jdk8兼容了。如果你懶得去下載Tomcat8然后獲取里邊的高版本ecj.jar,可以去Maven中央倉庫獲取對應版本的ecj.jar:https://mvnrepository.com/artifact/org.eclipse.jdt.core.compiler/ecj

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM