A jar
chỉ là một container. Nó là một tập tin lưu trữ ā la tar
. Mặc dù jar
có thể có thông tin thú vị trong hệ thống phân cấp META-INF , nhưng nó không có nghĩa vụ phải chỉ định cổ điển của các lớp trong nội dung của nó. Đối với điều đó, người ta phải kiểm traclass
tập tin trong đó.
Như Peter Lawrey đã đề cập trong bình luận cho câu hỏi ban đầu, bạn không nhất thiết phải biết bản phát hành JDK nào đã tạo một class
tệp đã cho , nhưng bạn có thể tìm ra phiên bản lớp mã byte của class
tệp có trong mộtjar
.
Vâng, điều này thật tệ, nhưng bước đầu tiên là trích xuất một hoặc nhiều lớp từ jar
. Ví dụ:
$ jar xf log4j-1.2.15.jar
Trên Linux, Mac OS X hoặc Windows đã cài đặt Cygwin , lệnh tệp (1) biết phiên bản lớp.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Hoặc cách khác, sử dụng javap
từ JDK như @ jike.thunderbolt khéo léo chỉ ra:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
Và nếu bạn bị rớt xuống một Windows
môi trường mà không có file
hoặcgrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, tôi sẽ đồng ý rằng javap
sẽ nói rất nhiều về một class
tập tin nhất định so với câu hỏi ban đầu được hỏi.
Dù sao, một phiên bản lớp khác, ví dụ:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Số chính của phiên bản lớp tương ứng với các phiên bản Java JDK sau:
- 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