jar 只是一个容器。它是一个文件存档ā la tar。虽然jar 可能在其META-INF 层次结构中包含有趣的信息,但它没有义务在其内容中指定类的年份。为此,必须检查其中的class 文件。
正如Peter Lawrey 在对原始问题的评论中提到的那样,您不一定知道哪个JDK 版本构建了给定的class 文件,但您可以找出包含的class 文件的字节码类版本在jar。
是的,这有点糟糕,但第一步是从jar 中提取一个或多个类。例如:
$ jar xf log4j-1.2.15.jar
在安装了Cygwin 的 Linux、Mac OS X 或 Windows 上,file(1) 命令知道类版本。
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
或者,使用 JDK 中的 javap @jikes.thunderbolt 恰当地指出:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
对于没有file 或grep 的Windows 环境
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW,我同意javap 将比原来的问题提供更多关于给定class 文件的信息。
不管怎样,不同的类版本,例如:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
类版本主号对应以下Java JDK版本:
- 45.3 = Java 1.1
- 46 = Java 1.2
- 47 = Java 1.3
- 48 = Java 1.4
- 49 = Java 5
- 50 = Java 6
- 51 = Java 7
- 52 = Java 8
- 53 = Java 9
- 54 = Java 10
- 55 = Java 11
- 56 = Java 12
- 57 = Java 13
- 58 = Java 14