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
45 3 1.0
45 3 1.1
46 0 1.2
47 0 1.3
48 0 1.4
49 0 1.5
50 0 1.6
51 0 1.7
52 0 1.8
53 0 1.9


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.

<code=java>javac -source 1.6 -target 1.6 MeineKlasse.java</code=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.

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