unsupported major.minor version 解决方法

转载自http://hi.baidu.com/fatchong/blog/item/191da23b478bbfef15cecbae.html

        一直以来都是用jdk1.5,这次重返电信由于其系统是在jdk1.4上编译的,编译的时候出现了unsupported major.minor version49.0的错误,上网查看了一下还是一个很普遍的错误,捣鼓了两天终于捣鼓出一些东西,现分享给大家。

     何谓 major.minor,且又居身于何处呢?先感性认识并找到 major.minor 来。顺便写一段 代码,然后用 JDK 1.5 的编译器编译成class,用UltraEdit或者其他能打开非十进制文件的软件打开此class,见下图:        

       从上图中我们看出来了什么是 major.minor version 了,它相当于一个软件的主次版本号,只是在这里是标识的一个 Java Class 的主版本号和次版本号,同时我们看到 minor_version 为 0x0000,major_version 为 0x0031,转换为十制数分别为0 和 49,即 major.minor 就是 49.0 了。

      现在不妨从 JDK 1.1 到 JDK 1.7 编译器编译出的 class 的默认 minor.major version 吧。(又走到 Sun 的网站上翻腾出我从来都没用过的古董来)
     

JDK 编译器版本 target 参数 十六进制 minor.major 十进制 minor.major
jdk1.1.8 不能带 target 参数 00 03 00 2D 45.3
jdk1.2.2 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00   00 2E 46.0
jdk1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00   00 2F 47.0
j2sdk1.4.2_10 不带(默认为 -target 1.2) 00 00   00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00   00 30 48.0
jdk1.5.0_11 不带(默认为 -target 1.5) 00 00   00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.6.0_01 不带(默认为 -target 1.6) 00 00   00 32 50.0
jdk1.6.0_01 -target 1.5 00 00   00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00   00 30 48.0
jdk1.7.0 不带(默认为 -target 1.6) 00 00   00 32 50.0
jdk1.7.0 -target 1.7 00 00   00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00   00 30 48.0
Apache Harmony 5.0M3 不带(默认为 -target 1.2) 00 00   00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00   00 30 48.0

       当然你也可以用其他方法查看版本号,比如javap -verbose XXXX(class名)。

        那么现在如果碰到这种问题该知道如何解决了吧,还会像我所见到有些兄弟那样,去找个
1.4 的 JDK
下载安装,然后用其重新编译所有的代码吗?且不说这种方法的繁琐,而且web应用程序还不一定能成功,其实大可不必如此费神,我们一定还记得 javac
还有个 -target 参数,对啦,可以继续使用 1.5 JDK,编译时带上参数 -target 1.4 -source 1.4 就 OK
啦,不过你一定要对哪些 API 是 1.5 JDK 加入进来的了如指掌,不能你的 class 文件拿到 JVM 1.4 下就会 method
not found。目标 JVM 是 1.3 的话,编译选项就用 -target 1.3 -source 1.3 了。

      相应的如果使用 ant ,它的 javac 任务也可对应的选择 target 和 source

<javac target="1.4" source="1.4" ............................/>

如果是在开发中,可以肯定的是现在真正算得上是 JAVA IDE 对于工程也都有编译选项设置目标代码的。例如 Eclipse 的项目属性中的 Java Compiler 设置,如图:

        

        其实理解 major.minor 就像是我们可以这么想像,同样是微软件的程序,32 位的应用程序不能拿到 16 位系统中执行那样。

如果我们发布前了解到目标 JVM 版本,知道怎么从 java class 文件中看出 major.minor 版本来,就不用等到服务器报出异常才着手去解决,也就能预知到可能发生的问题。

其他时候遇到这个问题应具体解决,总之问题的根由是低版本的 JVM 无法加载高版本的 class 文件造成的,找到高版本的 class 文件处理一下就行了。

时间: 2024-08-28 19:28:03

unsupported major.minor version 解决方法的相关文章

Unsupported major.minor version 49.0的错误解决

Unsupported major.minor version 49.0的错误解决 Posted on 2011-01-14 16:49 chinaifne 阅读(15840) 评论(0)  编辑 收藏 在装2个不同版本JDK时遇到了这个问题,在网上钩了一吧!查到一个讲解比较好的资料. 一:要解决的问题 我们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措.因为刚开始那会儿,网上与此相关的中文资料

Elasticsearch 安装的时候,Unsupported major.minor version 51.0问题的解决

Elasticsearch安装的时候报错 bootstrap/Elasticsearch : Unsupported major.minor version 51.0 网上一般说的方法是,升级或者降级jdk版本,我用了还是没有解决(我jdk原来是1.6 后来升级到1.8). 其实增加环境变量ES_HEAP_SIZE,值为:256m(或者512m),要带m,不是纯数字.这是分配最大和最小的存储容量. 主要是网上的安装文章通常是告诉你配置jdk 然后直接运行,但是没有设置这个变量导致的. 具体可以参

如何解决Eclipse开发android程序的编译错误:com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0?

近日,升级了android的开发工具,发现它在Eclipse上运行程序的时候报如下的错误: Errors occurred during the build.   Errors running builder 'Android Package Builder' on project 'EX04_03'.   com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0 原因:个人电脑上装的JDK是1.7 解决办法

应用部署weblogic 报错Unsupported major.minor version 51.0的解决过程

应用部署weblogic 报错Unsupported major.minor version 51.0的解决过程 ? ? 1.部署提示错误:Unsupported major.minor version 51.0 1.1 错误现象如下图所示: 1.2 原因分析 类似错误均属于Java版本问题,即JDK版本过低,只要选择相对应的JDK版本编译即可.48,49,50.51.52是Java编译器内部的版本号:Unsupported major.minor version 52.0 对应于 JDK1.8

java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0解决办法

androidstudio编译程序时出现java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0.Unsupported major.minor version 52.这个错误是由于(jdk)高版本的java project使用了低版本的来运行.使用命令(java -version 和 javac -version)查看java

解决Unsupported major.minor version 51.0错误

Unsupported major.minor version 51.0解决办法 www.111cn.net 编辑:swteen 来源:转载 我使用的是Eclipse-jee-indigo + JDK 1.6.23环境,结果使用时出现Unsupported major.minor version 51.0错误提示,下面我来介绍Unsupported major.minor version 51.0错误的解决办法 今天偶然间同事遇到一个问题,也加深了自己对eclipse中build path和ja

Unsupported major.minor version 51.0错误解决

今天在做中文分词,遇到很多问题,真是困难重重,而且是让人哭笑不得的问题,觉累不爱了...下面和大家分享一下吧! 一:引入jar包 下载了jar包到桌面了,然后我就复制粘贴到了项目中,但是在类中死活无法import jar包中的类,当时是一头雾水, 于是切到桌面看了一下jar包发现才200多k,豁然开朗!!!!,尼玛,jar包下载失败了,里面的类没下载下来(我去TM的下载失败你还显示在桌面上干嘛!!我TM以为下载成功了呢)希望大家引以为戒,浪费生命呀!!! 二:Unsupported major.

解决Unsupported major.minor version 51.0问题的感悟

今天偶然间同事遇到一个问题,也加深了自己对eclipse中build path和java compiler compliance level的理解.           问题是这样的,同事在eclipse中开发的项目,导成jar之后,放到服务器上,总是报"Unsupported major.minor version 51.0"的错误,从网上查,一直说是JDK的问题,但是就不是很清楚怎么回事,怎么解决,最后,经过另一个同事,终于解决了,也使我终于明白了问题的来龙去脉:在eclipse中

Unsupported major.minor version 51.0问题的解决

在java编程的过程中,当用myeclipse软件打开别人写的代码时,遇到Unsupported major.minor version 51.0此类问题,实在是令人痛苦不堪,弄了整整一晚才搞清楚,我总结它的原因是我们安装的myeclipse的编译和运行环境的版本比我们要打开的代码的低好多,与我们安装的jdk版本不符,因此我们要配置myeclipse软件的编译和运行配,步骤如下, 1. 打开window中的preferences,如下图所示,点击add,点击next,进入到最后一张图片中,选择我