转载自 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 文件处理一下就行了。
分享到:
相关推荐
Unsupported major.minor version 51.0 错误是由于 JDK 版本不匹配引起的,可以通过保持 Tomcat 绑定的 JDK 版本和编译用的 JDK 版本一致来解决该错误。同时,理解 Java 类文件的版本号、JDK 编译和运行过程、Tomcat...
Tomcat报错Unsupported major.minor version xxx的解决方法 一、问题背景 在Java开发过程中,我们经常会遇到Tomcat报错Unsupported major.minor version xxx的问题。这是因为编译的JDK版本和运行时所用的JDK版本不...
在Java编程中,"Unsupported major.minor version 51.0"是一个常见的错误,它通常发生在尝试使用较旧版本的Java虚拟机(JVM)运行由较新版本的Java编译器编译的代码时。这个错误信息表示JVM无法识别或支持编译后的...
JPEG库,全称为Joint Photographic Experts Group,是用于处理JPEG图像格式的标准库,而`jpeglib`是这个库的核心部分。JPEG是一种广泛使用的有损压缩算法,尤其适用于照片和其他连续色调的图像。在JPEGlib 61版本中...
Javarebel是一个Jvm插件,它能够动态重新装载Java类特性。...JavaRebel允许一个应用程序(独立的或运行在应用服务器上的应用)重新装载在运行过程中发生的大多数类变化,包括增加或删除方法和域。节省了很多工作量。
总结起来,处理带资源文件的JAR在Android中并非易事,但通过上述方法,开发者可以根据项目需求选择合适的方式。在实际开发中,考虑到性能、安全性和可维护性,推荐使用AssetManager或者将资源解压到存储目录,这两种...
包含selenium-server-standalone-3.0.1.jar,selenium-java-2.53.0.jar,selenium-java-2.53.0-srcs.jar及自动化测试所需要的jar包
Caused by:xxx Unsupported major.minor version 52.0。翻译为中文:(Tomcat)不支持52.0版本的镜像 二、jdk与major.mijor version对应的关系如下 JDK 1.1 = 45 JDK 1.2 = 46 JDK 1.3 = 47 JDK 1.4 = 48 JDK 1.5 = ...
这里我们讨论的焦点是“JDK1.5环境下编译的jar包在JDK1.4环境下运行”所遇到的问题,具体表现为“Unsupported major.minor version 49.0”的错误。这个错误的根源在于Java字节码版本不兼容。Java字节码版本与JDK版本...
3:如果出现 Unsupported major.minor version 52.0 则表示该文件的版本与本地的jdk版本不匹配 经测试 jdk1.7.0使用1.05版本的AndroidKeystore jdk1.8.0使用1.07版本的AndroidKeystore (资源里面两个版本的都有) ...
3:如果出现 Unsupported major.minor version 52.0 则表示该文件的版本与本地的jdk版本不匹配 经测试 jdk1.7.0使用1.05版本的AndroidKeystore jdk1.8.0使用1.07版本的AndroidKeystore (资源里面两个版本的都有) ...
3. **Unsupported major.minor version 错误**:这个错误通常发生在尝试用一个较新版本的JDK编译的类文件在旧版本的JVM上运行时。例如,JDK 1.5编译的类文件(major_version为49)无法在JVM 1.4或更早版本上运行,...
geohash官方发布以及maven发布的版本都是基于jdk1.7编译的,碰到jdk1.6的项目会报unsupported major.minor version 51.0错误。这个资源是我基于jdk1.6编译的,执行测试案例都通过了。
spatial4j官方发布以及maven发布的版本都是基于jdk1.7编译的,碰到jdk1.6的项目会报unsupported major.minor version 51.0错误。这个资源是我基于jdk1.6编译的,执行测试案例都通过了。
该资源包含jython2.5.4.jar和jython2.7.0.jar,jython的版本要与jdk的版本要对应,这样可以解决“Unsupported major.minor version 51.0”问题。其中,对于jdk1.6.x的版本,请使用jython2.5.4.jar jdk1.7.x的版本,...
在网上下载了jpinyin的jar包,发现是jdk1.7编译的,而我的jdk是1.6的,会报Unsupported major.minor version 51.0异常。所以自己把源码从新用jdk1.6编译了下,这样就可以在jdk1.6的环境中用了。
当我们引入的jar包和本地的jdk版本有冲突的情况下,会报一下错误:java.lang.UnsupportedClassVersionError:com/sun/tools/javac/Main : Unsupported major.minor version 51.0,所以我们需要强制给jar依赖的jdk版本...
java.lang.UnsupportedClassVersionError: org/apache/catalina/authenticator/FormAuthenticator : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang....
5. 错误:Unsupported major.minor version 51.0(jdk 版本错误)。 解决方法:检查 JDK 版本,避免在 Win7 下开发项目使用的 JDK 版本和项目运行服务器 JDK 版本不同。可以重装 JDK 到 1.6 版本,然后将项目的 ...