JDK 不同版本编译问题
2016-07-29 00:00
246 查看
java.lang.UnsupportedClassVersionError 错误原因
一直在tomcat服务器上做开发,客户要求部署到TongWeb服务器上,并且要求JDK版本为 1.4.2 。把WEB应用部署到TongWeb上,本来在tomcat正常的运行的程序在TongWeb上出现了java.lang.UnsupportedClassVersionError异常。
TongWeb的JSP容器也是Tomcat呀。应该不会出现这样的问题。原因是什么呢?G一下。找到了原因。总结如下:
出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。
因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。
这个错误尤其在JDK5与JDK5之前的版本上表现明显。因为,JDK5在Java语法上作了不少增强,引入了一些新的.class文件的元素,导致旧版本的JVM无法解释、执行.class文件。即使这个类并没有使用任何JDK5的新元素,但是JDK5生成的.class文件,JDK1.4及其以前的JVM都无法辨认!
所以,目前使用最广的,还是JDK1.4。很多软件和项目都无法使用JDK5。
有一个名叫 Toby Reyelts 的开发人员决定消除 JDK 5.0 编译器限制。结果就是开放源代码的 Retroweaver 项目(参见 参考资料)。Retroweaver 使用 classworking 技术来修改由 JDK 5.0 编译器生成的二进制类表示,以便这些类可以与早期的 JVM 一起使用。
它通过修改JDK5生成的.class文件,将其变为JVM1.4及之前版本能够运行的.class文件。
目前,使用新版本的IDE编译程序可能会造成你遭遇java.lang.UnsupportedClassVersionError 错误。
比如,Eclipse3.3+MyEclipse6.5这个新版的IDE工具。进入首选项---Java---编译器,可以看到,默认的编译器依从等级是5.0,这里改为1.4,因为我们使用的软件需要运行在JDK1.4的JVM上。
步骤:项目点右键-->Properties-->Java Compiler-->将Enable project specific settings前的勾去掉-->Compiler compiliance level选择你想要的版本
在MyEclipse----应用服务器下,指定Tomcat5。指定Tomcat使用jdk1.4。
这样,就全部指定使用Jdk1.4来编译和运行程序了。如果全部指定jdk5也是可以的。但是,绝对不能够使用jdk5编译程序,而又在jdk1.4上运行程序,那样将会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。反之,则可以。
这种情况下,不论是Eclipse生成的war包,还是ant文件生成war包,都使用jdk5编译,就会在运行时出现错误,该应用程序将无法启动。如果你查看Tomcat的日志文件,将会看到正是java.lang.UnsupportedClassVersionError错误发生了!
经验:以后做开发,如果可能的话,尽量使用JDK1.4,1.5来编译源程序,不要使用JDK过高版本的特性,以保持较好的移植性和兼容性。
一直在tomcat服务器上做开发,客户要求部署到TongWeb服务器上,并且要求JDK版本为 1.4.2 。把WEB应用部署到TongWeb上,本来在tomcat正常的运行的程序在TongWeb上出现了java.lang.UnsupportedClassVersionError异常。
TongWeb的JSP容器也是Tomcat呀。应该不会出现这样的问题。原因是什么呢?G一下。找到了原因。总结如下:
出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。
因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。
这个错误尤其在JDK5与JDK5之前的版本上表现明显。因为,JDK5在Java语法上作了不少增强,引入了一些新的.class文件的元素,导致旧版本的JVM无法解释、执行.class文件。即使这个类并没有使用任何JDK5的新元素,但是JDK5生成的.class文件,JDK1.4及其以前的JVM都无法辨认!
所以,目前使用最广的,还是JDK1.4。很多软件和项目都无法使用JDK5。
有一个名叫 Toby Reyelts 的开发人员决定消除 JDK 5.0 编译器限制。结果就是开放源代码的 Retroweaver 项目(参见 参考资料)。Retroweaver 使用 classworking 技术来修改由 JDK 5.0 编译器生成的二进制类表示,以便这些类可以与早期的 JVM 一起使用。
它通过修改JDK5生成的.class文件,将其变为JVM1.4及之前版本能够运行的.class文件。
目前,使用新版本的IDE编译程序可能会造成你遭遇java.lang.UnsupportedClassVersionError 错误。
比如,Eclipse3.3+MyEclipse6.5这个新版的IDE工具。进入首选项---Java---编译器,可以看到,默认的编译器依从等级是5.0,这里改为1.4,因为我们使用的软件需要运行在JDK1.4的JVM上。
步骤:项目点右键-->Properties-->Java Compiler-->将Enable project specific settings前的勾去掉-->Compiler compiliance level选择你想要的版本
在MyEclipse----应用服务器下,指定Tomcat5。指定Tomcat使用jdk1.4。
这样,就全部指定使用Jdk1.4来编译和运行程序了。如果全部指定jdk5也是可以的。但是,绝对不能够使用jdk5编译程序,而又在jdk1.4上运行程序,那样将会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。反之,则可以。
这种情况下,不论是Eclipse生成的war包,还是ant文件生成war包,都使用jdk5编译,就会在运行时出现错误,该应用程序将无法启动。如果你查看Tomcat的日志文件,将会看到正是java.lang.UnsupportedClassVersionError错误发生了!
经验:以后做开发,如果可能的话,尽量使用JDK1.4,1.5来编译源程序,不要使用JDK过高版本的特性,以保持较好的移植性和兼容性。
相关文章推荐
- JDK版本兼容性问题以及在Eclipse中设置不同jdk版本编译
- JDK 不同版本编译问题 ........
- JDK 不同版本编译问题
- 不同版本jdk以及tomcat共存的问题
- Java笔记(三)--不同版本jdk以及tomcat共存的问题
- CCS5.5.0编译问题之” version of compiler版本不同”
- MDK 不同版本编译的问题
- 基于MTK平台的不同安卓版本软件编译的JDK版本GCC版本切换脚本
- 不同版本gcc编译编译相同kernel source code 的问题
- 关于不同版本jdk的tomcat共存问题
- xcode针对不同IOS版本的代码编译问题
- Myeclipse编译工程用Weblogic发布的时候jdk版本问题
- Eclipse配置不同JDK版本遇到的一些问题与总结
- JDK和JRE不同版本切换的问题
- VC下 Runtime 版本不同原因引起的一个编译问题案例
- MyEclipse中项目利用不同版本JDK编译注意点
- jdk版本不同引发的怪异问题(jdk1.5与jdk1.6之间)
- 使用不同版本jdk时出现的问题记录
- java程序的编译和运行依赖jdk版本问题
- 编译不同版本Android源码,切换gcc和jdk