Java-Compiler-Level und .class-Datei Versionen (major- und minor version number)

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen

Der Compiler erzeugt vom JDK versionsabhängige Datei-Formate, die der Interpreter nach bestimmten Merkmalen untersucht, bevor er die Klasse ausführt.

Die Versionsnummern geben ihm Aufschluss darüber, ob eine Klasse mit einem kompatiblen JDK kompiliert wurde. Dazu vergleicht er u.a. die major- und die minor version number, welche neben der berühmten magic number (0xCAFEBABE) im Fileheader stehen.

Nachfolgend werden in einer Übersicht alle bisher veröffentlichten JDKs mit den dazu gehörenden major version und minor version numbers aufgelistet:

Major Version Minor Version JDK Version Veröffentlichungsdatum
45 3 1.0 1996
45 3 1.1 1997
46 0 1.2 4. Dezember 1998
47 0 1.3 8. Mai 2000
48 0 1.4 13. Februar 2002
49 0 5 30. September 2004
50 0 6 11. Dezember 2006
51 0 7 28. Juli 2011
52 0 8 18. März 2014
53 0 9 21. September 2017
54 0 10 20. März 2018
55 0 11 25. September 2018


Eine Java-Anwendung, die mit einem aktuellen JDK kompiliert wurde, läuft nicht in einer älteren JRE.

UnsupportedClassVersionError.jpeg

Compiler-Level

In den meisten Fällen genügt es bereits, den Compiler-Level auf die Zielplattform auszurichten und neu zu kompilieren. Das heißt, dass mit einer Compiler-Option eingestellt werden kann, welche JRE-Version ein Programm mindestens benötigt, um ausgeführt zu werden.

Bsp: Eine Java-Anwendung wurde mit dem JDK 7 geschrieben. Beim Ausführen wird beim Anwender ein UnsupportedClassVersionError in der Java-Konsole ausgegeben. Der Programmierer hat in seinem Programm nur Klassen aus den JDKs bis Version 6 verwendet. Dann kann er recht einfach die Anzahl der erreichbaren Ziel-VMs vergrößern, indem er den Compiler-Level auf Java 6 einstellt und neu kompiliert. Die großen IDEs wie Eclipse und Netbeans bieten dazu Optionen in den Einstellungen an. Für Java-Editoren muss meist die Option an den Compiler-Aufruf angehängt werden.

javac -source 1.6 -target 1.6 MeineKlasse.java

Mit dieser Anweisung akzeptiert der Compiler nur Klassen, die bis zum JDK 6 eingeführt wurden und erzeugt Bytecode für JREs ab Version 6.

Compiler Version ermitteln



--L-ectron-X 02:53, 01. Feb 2012 (CET)