UnSupportedClassVersionError

一、UnSupportedClassVersionError异常产生的根源

有时我们的代码在运行时,会抛出java.lang.UnSupportedClassVersionError异常。这个异常是java.lang.ClassFormatError(此类是java.lang.LinkageError)的子类。JVM在将一个class调入时候,在link阶段会检查class文件中的magic number,如果发现该magic number不在JVM所支持范围之内,就会扔出java.lang.UnSupportedClassVersionError异常。

当我们将java源代码文件编译成class文件的时候,class文件头部会有一个magic number,这个magic number即class文件的版本号码。通常的格式是:major_version.minor_version。这个号码暗示了class文件的格式。

通常来讲,使用高版本的jdk编译出来的class,运行在低版本的jdk环境上会出现此种错误。例如,使用JDK1.5编译出来的class运行在JDK 1.4上会报出这样的错误信息:

"java.lang.UnsupportedClassVersionError: Bad version number in .class file [at java.lang.ClassLoader.defineClass1(Native Method)]"

注意反之并不一定成立,即低版本JDK编译出来的class可以没有问题的运行在高版本的JDK上。

二、解决UnSupportedClassVersionError异常

1、到处问题的jar档,找到其源代码使用高版本的JDK重新编译;

2、升级JDK的版本试试看

三、编译Java代码

当我们使用javac编译源代码的时,有2个参数-source , -target。其中-source用来指定java语言的版本,-target用来指定class文件的版本。下面显示了各不同版本的JDK所支持的source版本和target版本。

JDK 默认的source source的范围 默认的target target的范围
1.0.x 1.0 -- 1.1 --
1.1.x 1.1 -- 1.1 --
1.2.x 1.2 -- 1.1 1.1 -- 1.2
1.3.x 1.2/1.3 -- 1.1 1.1 -- 1.3
1.4.x 1.2/1.3 1.2 -- 1.4 1.2 1.1 -- 1.4
5 1.5 1.2 -- 1.5 1.5 1.1 -- 1.5
6 1.6 1.2 -- 1.6 1.6 1.1 -- 1.6
7 1.7 1.2 -- 1.7 1.7 1.1 -- 1.7

target和class版本的映射表

target
class version

(major.minor)

1.1 45.3
1.2 46.0
1.3 47.0
1.4 48.0
1.5 49.0
1.6 50.0
1.7 51.0
1.8 52.0

参考资料

https://en.wikipedia.org/wiki/Java_class_file

https://blogs.oracle.com/darcy/entry/source_target_class_file_version

http://stackoverflow.com/questions/27065/tool-to-read-and-display-java-class-versions

时间: 2024-10-14 03:21:25

UnSupportedClassVersionError的相关文章

关于UnsupportedClassVersionError的错误处理

错误:Java.lang.UnsupportedClassVersionError: Bad version number in .class file 造成这种错误的原因是你的支持Tomcat运行的JDK版本与支持application运行的JDK版本不一致导致的. 解决办法:将JDK版本改成一致. 步骤如下: 1.Window --> Preferences -->Java -->compiler中的compiler compliance level对应的下拉菜单中选择JDK版本.

UnsupportedClassVersionError: Bad version number in...

在使用eclipse开发servlet可能会出现一个很麻烦事情,版本不一致错误. java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class com.tuniu.servlet.MyServlet) 原因是tomcat使用jdk和servlet使用的 jdk不一样, 解决方法就是统一即可. Eclipse配置Tomcat服务器 Eclipse->window->P

java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.

1.错误描述 严重: Exception starting filter struts2 java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.apache.commons.lang3.StringUtils) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(Webap

Maven 3.3.9 mvn -version Error:java.lang.UnsupportedClassVersionError

Description 在下载 Maven包,配置了环境变量之后,在命令行执行 mvn -version(or -v) 报错: 1 Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/ma 2 ven/cli/MavenCli : Unsupported major.minor version 51.0 3 at java.lang.ClassLoader.defineClass1(

jvm和tomcat 版本不匹配,报java.lang.UnsupportedClassVersionError

项目中报:java.lang.UnsupportedClassVersionError: org/hdht/commonweb/listener/MyServletContextListener 检查java的版本和设置版本是否一样, 检测java的jvm版本与tomcat的版本是否与java的版本一样

【java.lang.UnsupportedClassVersionError】版本不一致出错

这种错误的全部报错信息: 1 java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0 2 at java.lang.ClassLoader.defineClass1(Native Method) 3 at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 4

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/crack

执行一个jar文件的时候抛异常了 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/crack p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Andale Mono"; color: #29f914; background-color: #000000 } span.s1 { color: #afad24 } sp

【原创】Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0

有多个情况造成这种异常,以下列举 1.JDK 和 MAVEN 版本不兼容 从apache 官网下载maven bin 版本,我下的是apache-maven-3.3.3-bin.zip. 下载下来的安装包解压到你的工作目录下.如:E:\开发\apache-maven-3.3.3,配置环境变量,MAVEN_HOME,再把%MAVEN_HOME%\bin配置到 path中. 安装java jdk,配置JAVA_HOME.打开cmd ,输入mvn -r,如果会报错.java.lang.Unsuppor

编译异常 Caused by: java.lang.UnsupportedClassVersionError:

Caused by: java.lang.UnsupportedClassVersionError: com/sumingk/platform/service/impl/ServiceSysPersonImpl : Unsupported major.minor version 51.0 (unable to load class com.sumingk.platform.service.impl.ServiceSysPersonImpl) at org.apache.catalina.load