找到编译后的 class 版本号
find the compiled class version number
我的项目包含一些第三方 jar 文件,这些文件是在 java 的不同版本中编译的。
我的项目使用旧版本的 java,所以我在执行应用程序时得到 UnsupportedClassVersionError
。
有没有其他方法可以获取编译了 class 文件的 java/jre number[45..51]
版本,以便我可以在使用它之前检查 jar 文件。
您可以使用 javap
(对于详细模式使用 -v
),并从 jar 文件中指定任何 class。例如,查看 Joda Time jar 文件:
javap -cp joda-time-2.7.jar -v org.joda.time.LocalDate
这里的 -cp
参数指定 jar 文件位于 class 路径中,-v
指定我们需要更详细的信息,然后是一个 class 在 jar 文件中。
输出开始于:
Classfile jar:file:/c:/Users/Jon/Test/joda-time-2.7.jar!/org/joda/time/LocalDate.class
Last modified 12-Jan-2015; size 16535 bytes
MD5 checksum d19ebb51bc5eabecbf225945eccd23ef
Compiled from "LocalDate.java"
public final class org.joda.time.LocalDate extends org.joda.time.base.BaseLocal implements org.joda.time.ReadablePartial,java.io.Serializable
minor version: 0
major version: 49
"minor version" 和 "major version" 位是您感兴趣的位。
当然,单个 jar 文件可能包含 class使用不同版本编译的 es。
如果您只有标准的 Unix 工具可用,而没有 javap
命令,那么您可以获得十六进制 <minor> <major>
版本形式的 class 文件版本,如下所示:
$ dd if=YourFile.class ibs=1 skip=4 count=4 of=/dev/stdout status=none | od -An -tx2 --endian=big
示例输出。 0034
是 52
因此这个 class 是 java 8.
0000 0034
我的项目包含一些第三方 jar 文件,这些文件是在 java 的不同版本中编译的。
我的项目使用旧版本的 java,所以我在执行应用程序时得到 UnsupportedClassVersionError
。
有没有其他方法可以获取编译了 class 文件的 java/jre number[45..51]
版本,以便我可以在使用它之前检查 jar 文件。
您可以使用 javap
(对于详细模式使用 -v
),并从 jar 文件中指定任何 class。例如,查看 Joda Time jar 文件:
javap -cp joda-time-2.7.jar -v org.joda.time.LocalDate
这里的 -cp
参数指定 jar 文件位于 class 路径中,-v
指定我们需要更详细的信息,然后是一个 class 在 jar 文件中。
输出开始于:
Classfile jar:file:/c:/Users/Jon/Test/joda-time-2.7.jar!/org/joda/time/LocalDate.class
Last modified 12-Jan-2015; size 16535 bytes
MD5 checksum d19ebb51bc5eabecbf225945eccd23ef
Compiled from "LocalDate.java"
public final class org.joda.time.LocalDate extends org.joda.time.base.BaseLocal implements org.joda.time.ReadablePartial,java.io.Serializable
minor version: 0
major version: 49
"minor version" 和 "major version" 位是您感兴趣的位。
当然,单个 jar 文件可能包含 class使用不同版本编译的 es。
如果您只有标准的 Unix 工具可用,而没有 javap
命令,那么您可以获得十六进制 <minor> <major>
版本形式的 class 文件版本,如下所示:
$ dd if=YourFile.class ibs=1 skip=4 count=4 of=/dev/stdout status=none | od -An -tx2 --endian=big
示例输出。 0034
是 52
因此这个 class 是 java 8.
0000 0034