今日在做系统补丁开发时,偶遇了一番UnsupportedClassVersionError错误。从异常栈信息来说,Bad Version number in .class file 已经是非常明确的指示!可惜的是,往往在实际当中,总是被一些表面东西遮盖了这个Error的真实面目,把简单复杂化了(造成这个问题多是IDE引起的, 哎,方便的同时,也在制造麻烦)。
Google了一番无疑都是指向同一个问题:Java虚拟机版本不一致引发编译后.class文件在类加载时不能通过JVM验证的问题。当然在此,解决方 案也是,只需要求统一Java虚拟机版本重新编译就行了。
这次碰到的情况不会跳出上面的问题,只是在检测这个异常的时候被Eclipse蒙蔽了眼睛,走了一小段弯路罢了!在工程中显示的JRE是1.5,但是在部 署到JBOSS服务器时,就老爱抛UnsupportedClassVersionError错误,哎,在Eclipse中一时半会以为工程的配置都 OK,但是,等自己打开Eclipse中的Java Complier时,却无语的发现这里显示的是1.6,哎,可能是自己电脑上安装了其他JVM的问题!
【MARK】异常信息
- java.lang.UnsupportedClassVersionError: Bad version number in . class file
- at java.lang.ClassLoader.defineClass1(Native Method)
- at java.lang.ClassLoader.defineClass(Unknown Source)
- at java.security.SecureClassLoader.defineClass(Unknown Source)
- at java.net.URLClassLoader.defineClass(Unknown Source)
- at java.net.URLClassLoader.access$100 (Unknown Source)
- at java.net.URLClassLoader$1 .run(Unknown Source)
- at java.security.AccessController.doPrivileged(Native Method)
- at java.net.URLClassLoader.findClass(Unknown Source)
- at java.lang.ClassLoader.loadClass(Unknown Source)
- at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
- at java.lang.ClassLoader.loadClass(Unknown Source)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:683 )
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:425 )
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445 )
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673 )
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386 )
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196 )
2010-07-12