A jar
เป็นเพียงภาชนะบรรจุ มันเป็นไฟล์ที่เก็บ a tar
la แม้ว่า a jar
อาจมีข้อมูลที่น่าสนใจที่อยู่ในลำดับชั้นของMETA-INFแต่ก็ไม่มีข้อผูกมัดใด ๆ ในการระบุความเก่าแก่ของชั้นเรียนภายในเนื้อหา เพื่อที่หนึ่งจะต้องตรวจสอบclass
ไฟล์ในนั้น
ดังที่Peter Lawreyพูดถึงในการแสดงความคิดเห็นกับคำถามเดิมคุณไม่สามารถรู้ได้เลยว่า JDK รุ่นใดที่สร้างclass
ไฟล์ที่กำหนดแต่คุณสามารถค้นหารุ่นคลาสของรหัสไบต์ของclass
ไฟล์ที่อยู่ในjar
ไฟล์ที่มีอยู่ใน
ใช่นี้นะครับ jar
แต่ขั้นตอนแรกคือการดึงหนึ่งหรือมากกว่าหนึ่งชั้นเรียนจาก ตัวอย่างเช่น:
$ jar xf log4j-1.2.15.jar
บน Linux, Mac OS X หรือ Windows ที่ติดตั้งCygwinคำสั่งfile (1) จะรู้รุ่นของคลาส
$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3
หรือมิฉะนั้นให้ใช้javap
จาก JDK เป็น @ jikes.thunderbolt aptly ชี้ให้เห็น:
$ javap -v ./org/apache/log4j/Appender.class | grep major
major version: 45
และถ้าคุณถูกผลักไสให้เข้ากับWindows
สภาพแวดล้อมที่ไม่มีfile
หรือgrep
> 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