我的项目包含一些第三方jar文件,这些文件是在不同版本的java中编译的。
我的项目是使用旧版本的java,所以我在执行应用程序时得到UnsupportedClassVersionError
。
有没有其他方法可以获得编译类文件的java/jre number[45..51]
版本,以便我可以在使用之前检查jar文件。
答案 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
示例输出。 0034
是 52
,因此这个类是 java 8。
0000 0034