Alexandru Jecan ---

Wenn man über Migration redet, muss man klar zwischen der Migration von Applikationen und der Migration von Bibliotheken unterscheiden.

In diesem Artikel beschreibe ich, wie man vorhandene Java-Applikationen auf Java 9 migrieren kann und welche Schwierigkeiten und Probleme damit auftreten können. Man bedenke: Wenn man über Migration redet, muss man klar zwischen der Migration von Applikationen und der Migration von Bibliotheken unterscheiden.

Die Migration von Applikationen bezieht sich auf die Migration unseres Quellcodes. Die Migration von Bibliotheken bezieht sich auf die externen Bibliotheken, die unsere Applikation verwendet. Darüber hinaus gibt zwei unterschiedliche Arten von Migration: Top-down- und Bottom-up-Migration. Bei der Top-down-Migration werden die JAR-Dateien direkt auf dem Modulpfad platziert. Damit werden aus den JAR-Dateien automatische Module erzeugt. Anschließend muss man für jedes automatische Modul den Moduldeskriptor module-info.java anpassen und gegebenenfalls eine requires-Direktive einfügen. Schließlich lässt sich die ganze Applikation kompilieren und ausführen. Bottom-up-Migration funktioniert anders. Mit jdeps kann man herausfinden, welche Abhängigkeiten eine JAR-Datei des Klassenpfads hat. Nachher wird die Option –generate-module-info von jdeps verwendet, um für jede einzelne JAR-Datei einen Moduldeskriptor module-info.java automatisch zu generieren. Anschließend werden die Moduldeskriptoren überprüft. Falls nötig, werden exports-Direktiven manuell entfernt, um die interne Implementierung zu verbergen. Am Schluss wird die ganze Anwendung kompiliert und ausgeführt. Bei der Ausführung muss man trotzdem beachten, dass die neue Option –add-modules eingesetzt wird, um das Root-Modul zu nennen, damit der Auflösungsprozess gestartet wird. Der Zweck des Auflösungsprozesses besteht darin, alle rekursiven Abhängigkeiten zwischen Modulen zu finden.

Jede neue Java-SE-Version führt einige Inkompatibilitäten mit früheren Releases ein. Die Modularisierung der Java-SE-Plattform bringt viele Vorteile, aber auch viele Änderungen. Laut Oracle sollte Code, der nur APIs der offiziellen Java-SE-Plattform und unterstützte JDK-spezifische APIs verwendet, weiterhin ohne Änderungen funktionieren. Code, der bestimmte Funktionen oder JDK-interne APIs verwendet, kann nicht ausgeführt werden oder unterschiedliche Ergebnisse liefern.

Artikelserie

Teil 1: Java-9-Anwendungen kompilieren, paketieren und ausführen
Teil 2: Praktische Lösungen und Tipps für den erfolgreichen Umstieg auf Java 9
Teil 3: Top-down- und Bottom-up-Migration

Automatische Module sind der Schlüssel

Die automatischen Module werden für die Migration bestehender Anwendungen auf Java 9 verwendet. Ein automatisches Modul ist ein echtes Modul, das erstellt wird, indem man eine JAR-Datei auf den Modulpfad legt. Das geschieht mit der Option –module-path. Das automatische Modul erfordert (requires) alle vorhandenen Module aus dem System. Das sind alle eigenen Module, alle Module aus dem JDK sowie alle anderen automatische Module. Das heißt, ein automatisches Modul liest alle diese Module. Außerdem exportiert ein automatisches Modul alle Packages. Ein automatisches Modul kann zudem auf Typen des Klassenpfads zugreifen und eignet sich besonders für Drittanbietercode. Es wird nicht explizit deklariert. Stattdessen wird es automatisch beim Legen einer JAR-Datei auf den Modulpfad erstellt. Wir müssen keine Änderungen an der JAR-Datei vornehmen. Der Name des automatischen Moduls wird aus dem Namen der JAR-Datei abgeleitet. Die Entwickler sind damit nicht gezwungen abzuwarten, bis alle Drittanbieter ihre Bibliotheken modularisieren. Mithilfe des neuen Konzepts ist es möglich, JAR-Dateien schnell zu modularisieren und als Module auf dem Modulpfad statt als JAR-Dateien auf dem Klassenpfad zu verwenden. Natürlich es ist möglich, diese JAR-Dateien weiter auf dem Klassenpfad zu nutzen. In diesem Fall werden sie nicht modularisiert.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 7.17 - "Eclipse Oxygen"

Alle Infos zum Heft
579800761Die Tücken der Migration auf Java 9
X
- Gib Deinen Standort ein -
- or -