Ausblick: Der Umstieg auf Java 9

Mittwoch, 18.1.2017

Java 9 steht in den Startlöchern. Im Sommer 2017 soll laut dem Zeitplan das neue Release erscheinen. Ich habe mich ausgiebig mit der Vorabversion beschäftigt, die als größte Neuerung das neue Modulsystem Jigsaw mitbringt. Dabei bin ich auf einige Stolperfallen und Inkompatibilitäten für den Umstieg auf Java 9 gestoßen, die ich in einem Fachbeitrag für die Ausgabe 1/2017 des Fachmagazins JavaSpektrum zusammengefasst habe. Erfahren Sie mehr in unserem Whitepaper zu Java 9.

Das neue Modulsystem

Das neue Modulsystem bietet die Möglichkeit, Module und deren Abhängigkeiten in Java zu deklarieren. Die Abhängigkeiten werden zur Compile- und Laufzeit überprüft. Unser heißgeliebter Classpath wird in dem Zuge durch den Modulepath ersetzt, in dem nicht einzelne Klassen oder JARs, sondern ganze Module angegeben werden. Das Java Development Kit (JDK) wurde in mehrere Module aufgeteilt. Das bietet auch die Möglichkeit, für die Auslieferung von Anwendungen nur die benötigten Module mitzuliefern und nicht immer das komplette JDK.

Mit Java 9 kann man die JDK-Module als Abhängigkeit deklarieren, aber was ist mit den vielen Drittbibliotheken, die man benutzt? Solange noch nicht alle fremden oder auch eigenen Bibliotheken als Java-9-Module zur Verfügung stehen, gibt es drei mögliche Varianten, die Abwärtskompatibilität von Jigsaw sicherzustellen, die in dem Artikel ausführlich dargestellt werden.

Das neue Modulsystem bricht an einigen Stellen mit der Abwärtskompatibilität, die bei bisherigen Java-Releases immer heilig war. Das betrifft sowohl Sprachelemente, die Runtime-Umgebung und das Laufzeitverhalten. Die meisten Kompatibilitätsprobleme sind auf Jigsaw zurückzuführen. Die interne Struktur des JDK und des Java Runtime Environment (JRE) ändert sich in Bezug auf die enthaltenen Ordner und Dateien, sodass z.B. die bekannte rt.jar nicht mehr existiert. Mit dem Modulsystem wird auch der Standard-Classloader geändert, der u.a. zu einer ClassCastException in Gradle führt.

Andere Inkompatibilitäten aus 91 JEPs

Neben dem Modulsystem gibt es noch diverse andere Neuerungen, die in insgesamt 91 Java Enhancement Proposals (JEP) beschrieben sind an vielen Stellen Kompatibilitätsprobleme verursachen können. Der neue Garbage Collector G1 wird zwar keine Abbrüche und Exceptions auslösen, kann sich aber subtil auf die Performance auswirken. Das neue Versionierungsschema orientiert sich endlich am Industriestandard der semantischen Versionierung und löst erfreulicherweise die gewöhnungsbedürftige Logik ab, bei der Minor-Releases eine Update-Nummer als Vielfaches von 20 bekommen haben. Die konsequente Umsetzung führt aber zu einer Version 9.0.0 für das erste Release statt der bisherigen Version in der Form 1.8.0_u101 und kann zu Problemen bei Code führen, der die System-Property java.version abfragt und wie bisher davon ausgeht, dass Major-Version an zweiter Stelle steht.

Die Menge der beschriebenen Inkompatibilitäten kann durchaus eine Hürde oder sogar ein Hinderungsgrund für Unternehmen sein, Anwendungen auf die neue Java-Version umzustellen. Zumindest jedoch wird der Umstieg Zeit in Anspruch nehmen und muss sorgfältig geplant und vorbereitet werden. Ich bin sehr gespannt darauf, ob und wann das neue Modulsystem Jigsaw tatsächlich von populären Bibliotheken genutzt wird.

kostenloser Download

 


zurück zur Blogübersicht

Diese Beiträge könnten Sie ebenfalls interessieren

Keinen Beitrag verpassen – viadee Blog abonnieren

Jetzt Blog abonnieren!

Kommentare

Tobias Voß

Tobias Voß

Tobias Voß arbeitet als IT-Architekt in agilen Projekten bei der viadee. Er berät Kunden im Versicherungs- und Bankenumfeld bei der Umsetzung individueller Softwaresysteme mit den Schwerpunkten Java, Architektur und Prozessautomatisierung und leitet den Kompetenzbereich Java & Architektur der viadee.

Tobias Voß bei Xing  Tobias Voß auf Twitter