© Excellent backgrounds/Shutterstock.com
Java Magazin
Teil 3: Top-down- und Bottom-up-Migration

Die Tücken der Migration auf Java 9


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.

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

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 es 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.

Automatische Module sind der Schlüssel

Die automatis...

Java Magazin
Teil 3: Top-down- und Bottom-up-Migration

Die Tücken der Migration auf Java 9

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.

Alexandru Jecan


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.

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

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 es 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.

Automatische Module sind der Schlüssel

Die automatis...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang