老的项目进行维护时,都是在原有的jar包的基础上添加class或者修改class,而不是 重新编译jar包,这就要求所使用的jdk版本必须一致,否则运行时可能会遇到版本不一致的问题。查看一个class所使用的jdk版本,有两种方式。
第一种就是运用jdk自带的反编译命令:
javap -verbose classname
示例如下:
D:\WorkSpace\ThinkingInJava4\bin\thinkInJava\observerMod>javap -verbose Client
会输出一些信息(一部分类中的内容无用就不粘贴了,直接看文件头信息),大致如下:
Compiled from “Client.java”public class thinkInJava.observerMod.Client extends java.lang.ObjectSourceFile: “Client.java”minor version: 0major version: 49Constant pool:const #1 = class #2; // thinkInJava/observerMod/Client
后面省略了,可以看到前面有两行:
minor version:0
major version: 49
第二种方式:
用UE打开class文件,查看第一行信息:
CA FE BA BE 00 00 00 31…..
对应下表,可以找到对应的jdk编译版本
JDK 编译器版本 | target 参数 | (十六进制 )minor.major | (十进制) major.minor |
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 |