A jar
hanyalah sebuah wadah. Ini adalah arsip file ā la tar
. Meskipun jar
mungkin memiliki informasi menarik yang terkandung dalam hierarki META-INF itu, ia tidak memiliki kewajiban untuk menentukan vintage kelas di dalamnya. Untuk itu, seseorang harus memeriksa class
file - file di dalamnya.
Seperti yang disebutkan oleh Peter Lawrey dalam komentar terhadap pertanyaan awal, Anda tidak dapat selalu mengetahui rilis JDK mana yang membangun class
file yang diberikan , tetapi Anda dapat mengetahui versi kelas kode byte dari class
file yang terkandung dalam a jar
.
Ya, ini agak menyebalkan, tetapi langkah pertama adalah mengekstraksi satu atau lebih kelas dari jar
. Sebagai contoh:
$ jar xf log4j-1.2.15.jar
Di Linux, Mac OS X atau Windows dengan Cygwin terinstal, perintah file (1) tahu versi kelasnya.
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
Atau sebagai alternatif, menggunakan javap
dari JDK sebagai @ jikes.thunderbolt dengan tepat menunjukkan:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
Dan jika Anda terdegradasi ke Windows
lingkungan tanpa salah satu file
ataugrep
> javap -v ./org/apache/log4j/Appender.class | findstr major
major version: 45
FWIW, saya akan setuju bahwa javap
akan memberi tahu lebih banyak tentang class
file yang diberikan daripada pertanyaan asli yang diajukan.
Bagaimanapun, versi kelas yang berbeda, misalnya:
$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0
Nomor utama versi kelas sesuai dengan versi Java JDK berikut:
- 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