问题重述
今天帮同学调试一个SSM项目的时候,出现一个bug,导致服务器启动时报错,项目无法运行。这里记录下来已备自用。报错核心信息如下
Caused by: java.lang.UnsupportedClassVersionError: com/chinasofti/controller/AdminController : Unsupported major.minor version 52.0 (unable to load class com.chinasofti.controller.AdminController)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2963)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1212)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1692)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1573)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:394)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1396)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1343)
... 19 more
问题原因
在JavaSE API中查到对于该Error的描述如下
public class UnsupportedClassVersionError
extends ClassFormatError
Thrown when the Java Virtual Machine attempts to read a class file and determines that the major and minor version numbers in the file are not supported.
这个Error是当Java虚拟机试图读取类文件并确定不支持文件中的主版本号和子版本号时抛出。
简单的说就是高版本JDK所编译的项目拿到低版本的JRE环境运行,就会出现这个错误。
同学的这个项目是从别处拷来的,通过settings文件中的版本信息xml文件可以发现,原来编译的环境是Java 1.8,但是同学这里只有JDK 1.7,所以将org.eclipse.wst.common.project.facet.core.xml的java信息改成了1.7,强行在tomcat上运行。
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v7.0"/>
<fixed facet="java"/>
<fixed facet="jst.web"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="java" version="1.8"/> <!--同学将version改成了1.7-->
<installed facet="jst.web" version="2.5"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
解决方式
这里给出我解决的方式
右键单击项目名 ——> properties ——> Java Build Path ——> Libraries ——> 通过Edit修改JRE System Library项为.settings/org.eclipse.wst.common.project.facet.core.xml中规定的java版本 ——> 重启服务器即可
如果没有要求版本的JDK,可以在Oracle官网下载
https://www.oracle.com/technetwork/java/javase/downloads/index.html
安装完后进入eclipse ——> Window ——> Preferences ——> Java ——> Installed JREs ——> 点击Add ——> Standard VM ——> 选择jdk目录完成安装 ——> 再按照上述方式修改项目的JDK版本即可
如果仍然无法解决问题,那么可能是Tomcat的问题,同样需要保证Tomcat版本与规定的版本一致(其实不一致也没大问题)
主要是修改Tomcat中的JRE版本,步骤如下
Window ——> Preferences ——> Server ——> Runtime Environme ——> 选择服务器 ——> Edit ——> 修改JRE版本为规定的版本
如果以上方式仍然无法解决问题,可以尝试使用debug三板斧(误)——重启服务器,重启eclipse,重启电脑
如果还有其他问题可以分享在评论区,尝试一起解决