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

参考链接

原文地址:https://www.cnblogs.com/yulinlewis/p/9955618.html

时间: 2024-10-22 07:02:07

Tomcat - ClassFormatException的解决方法的相关文章

运行Tomcat报错 解决方法

运行Tomcat报错 解决方法 运行Tomcat控制台报错: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/jdk1.6.0_26/jre/lib/i386/server:/usr/local/jdk1.6.0_26/jre/lib/i3

java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(**_jsp.java)tomcat启动异常解决方法

今天遇到的其他一个问题就是,启动tomcat时,报:java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(index_jsp.java)异常,因为我刚刚配置服务器,以为JSP页面出现了问题,不过写了一个空的JSP页面依旧是,后来才知道,jar包冲突导致的,我在tomcat的lib目录下放了jsp-api.jar的jar包,而项目中最初也一直有一个这个jar包,方法产生了冲突.解决办法就是删除掉项目里WEB-INF/lib下

启动tomcat时 一闪而过解决方法

1 首先确定JAVA 已经配好了环境变量,具体配置方法,找一下度娘. 测试方法:进入cmd -> javac -version 能看到JAVA的版本信息,证明配置成功了. 2 分析一下问题出现的原因及解决办法 一般通过startup.bat启动tomcat时流程是:startup->catalina->setclasspath->catalina 先记事本打开startup.bat,找到最后一句话::end, 在后面加上一句pause (暂停等待的意思): 找到call "

CentOS7.4 系统下 Tomcat 启动慢解决方法

CentOS7.4 系统下 Tomcat 启动慢解决的方法 首先查看日志信息,查看因为什么而启动慢 在CentOS7启动Tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的.Tocmat的Session ID是通过SHA1算法计算得到的,计算Session ID的时候必须有一个密钥.为了提高安全性Tomcat在启动的时候会通过随机生成一个密钥. 22-Apr-2017 19:33:07.623 INFO [localhost-startS

tomcat启动慢解决方法

有时候新机器安装好tomcat后,启动特别慢:慢的话要等待十几分钟,于是网上找了解决方法:在catalina.sh中添加如下配置: JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" 具体原因,请参考:https://blog.csdn.net/zhujf21st/article/details/78043305作为运维完全不理解呀 原文地址:http://blog.51cto.com/liuzhengwei521/2116818

Tomcat内存泄露解决方法

环境: 今天早上,实施人员找我说,部署在tomcat上的一个项目总是间隔一段时间就自动关闭了,我询问一些可能发生的情况后,我就找了tomcat下的日志文件catalina.2015-04-13.log,localhost.2015-04-13.log这两文件,经过一番查找后,看到了下面一段 异常详细信息介绍: http://confluence.atlassian.com/pages/viewpage.action?pageId=218275753 原因大概是说tomcat 6.025之后引入了

zabbix JMX监控Tomcat及错误解决方法

1.修改zabbix_java相关选项 [[email protected] zabbix]# cd  /usr/local/sbin/zabbix_java [[email protected] zabbix_java]# vim settings.sh [[email protected] zabbix_java]# sed -e '/^#/d;/^$/d' settings.sh   #该文件默认全部注释,启用下面几项即可 LISTEN_IP="0.0.0.0" LISTEN_P

启动tomcat时 一闪而过解决方法(2)

下面我先跟大家确认一下问题出现的前提条件(本机版本java:1.6.20,tomcat:6.0.32) 1)在eclipse里面启动tomcat时都是正常的. 2)在系统中配置了各种环境变量如下: JAVA_HOME:H:\DevelopTools\Java\jdk1.6.0_20 CATALINA_BASE:H:\DevelopTools\apache-tomcat-6.0.32 CATALINA_HOME:H:\DevelopTools\apache-tomcat-6.0.32 CLASSP

tomcat日志乱码解决方法

日志乱码 vi  /usr/local/tomcat/bin/catalina.sh JAVA_OPTS="-Dfile.encoding=utf-8"