W jaki sposób można sprawdzić z użyciem której wersji Javy plik klasy został skompilowany?
W jaki sposób można sprawdzić z użyciem której wersji Javy plik klasy został skompilowany?
Można do tego celu użyć deassemblera kodu bajtowego (program narzędziowy javap), dostępnego standardowo w JDK.
Przykładowo, po zdeassemblowaniu pliku App.class z pakietu pl.altkom za pomocą polecenia:
javap -verbose pl/altkom/App
otrzymamy:
Classfile /C:/Users/lproboszcz/Desktop/maven-tests/test01/target/classes/pl/altkom/App.class Last modified 2016-05-05; size 533 bytes MD5 checksum ad1caeca3f7357c19aa1a6fc634ee1fa Compiled from "App.java" public class pl.altkom.App minor version: 0 major version: 49 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #6.#20 // java/lang/Object."<init>":()V #2 = Fieldref #21.#22 // java/lang/System.out:Ljava/io/PrintStream; #3 = String #23 // Hello World! ... itd.
Użytą wersję Javy identyfikuje parametr major version. I tak:
Odpowiedź deassemblera można dodatkowo przefiltrować w poszukiwaniu określonej wartości. Na systemie Windows odpowiednie polecenie będzie wyglądać następująco:
javap -verbose pl/altkom/App | findstr "major"
Na Unixie polecenie findstr trzeba zastąpić grep'em.