A jarเป็นเพียงภาชนะบรรจุ มันเป็นไฟล์ที่เก็บ a tarla แม้ว่า 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