找到已编译的类版本号

时间:2015-10-28 16:04:22

标签: java javac

我的项目包含一些第三方jar文件,这些文件是在不同版本的java中编译的。 我的项目是使用旧版本的java,所以我在执行应用程序时得到UnsupportedClassVersionError。 有没有其他方法可以获得编译类文件的java/jre number[45..51]版本,以便我可以在使用之前检查jar文件。

2 个答案:

答案 0 :(得分:9)

您可以使用javap(使用-v进行详细模式),并指定jar文件中的任何类。例如,查看Joda Time jar文件:

javap -cp joda-time-2.7.jar -v org.joda.time.LocalDate

这里-cp参数指定jar文件在类路径中,-v指定我们想要更详细的信息,然后在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

"次要版本"和#34;主要版本"比特是你感兴趣的。

当然,单个jar文件可能包含使用不同版本编译的类。

答案 1 :(得分:1)

如果您只有标准的 Unix 工具可用,而没有 javap 命令,那么您可以获得十六进制 <minor> <major> 版本形式的类文件版本,如下所示:

$ dd if=YourFile.class ibs=1 skip=4 count=4 of=/dev/stdout status=none | od -An -tx2 --endian=big

示例输出。 003452,因此这个类是 java 8。

 0000 0034