Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java 9 Modulsystem: Module, jlink & Custom Runtime Images erstellen

Was ist ein Modul?

Ein Modul ist eine benannte, selbstbeschreibende Sammlung von Code & Daten. Es definiert explizit:

Neue Phasen & Tools

  • Link Time (neu): Phase zwischen Compile Time & Run Time. jlink assembliert & optimiert Module zu einem Custom Runtime Image (minimale JRE).
  • javac, java, jlink erhalten --module-path Option.
  • Modular JAR: Enthält module-info.class im Root.
  • JMOD Format: Verpackungsformat (ähnlich JAR) für native Code & Config-Dateien; Input für jlink.

Schritt-für-Schritt: Modul erstellen & ausführen

1. Verzeichnisstruktur anlegen

C:\JAVA\src\com.beispiel.gruesse\module-info.java
C:\JAVA\src\com.beispiel.gruesse\com\beispiel\gruesse\Java9Tester.java

2. module-info.java

module com.beispiel.gruesse {
    // keine requires – nutzt nur java.base (implizit)
}

3. Anwendungs-Code

package com.beispiel.gruesse;

public class Java9Tester {
    public static void main(String[] args) {
        System.out.println("Hallo Welt aus Modul!");
    }
}

4. Kompilieren in mods/

javac -d mods/com.beispiel.gruesse \
      src/com.beispiel.gruesse/module-info.java \
      src/com.beispiel.gruesse/com/beispiel/gruesse/Java9Tester.java

5. Ausführen

java --module-path mods -m com.beispiel.gruesse/com.beispiel.gruesse.Java9Tester
  • --module-path mods: Modul-Verzeichnis.
  • -m <modul>/<MainClass>: Hauptmodul & Main-Klasse.

Ausgabe: Hallo Welt aus Modul!

Custom Runtime Image mit jlink

jlink --module-path mods:$JAVA_HOME/jmods \
      --add-modules com.beispiel.gruesse \
      --output mein-runtime

Erzeugt mein-runtime/ mit nur den nötigen Modulen (java.base + com.beispiel.gruesse). Starten:

mein-runtime/bin/java -m com.beispiel.gruesse/com.beispiel.gruesse.Java9Tester

Wichtige Konzepte

Konzept Beschreibung
Readability requires macht Typen des Zielmoduls zur Compile- & Laufzeit sichtbar.
Accessibility Nur exported Pakete sind für andere Module zugreifbar (Kapselung).
Implied Readability requires transitive – Abhängigkeit wird an Nutzer weitergereicht.
Services uses / provides ... with – entkoppelt Implementierung via ServiceLoader.
Open Modules opens für Reflection-Zugriff (z. B. Frameworks wie Spring/Hibernate).

Migration bestehender Anwendungen

  • Unnamed Module: Klassen auf Classpath (nicht Module Path) laufen im „Unnamed Module“ – lesen alle exportierten Pakete aller Module.
  • Automatic Modules: JARs auf Module Path ohne module-info werden zu Automatic Modules (Name = JAR-Name, exportiert alles, liest alles).
  • Schrittweise Migration: Library für Library modulieren.

Java

  1. C# using-Anweisungen meistern: Importe, Aliase und statische Direktiven
  2. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  3. Java Ein- und Ausgabe meistern: Drucken, Lesen und Formatieren Ihrer Daten
  4. Java Kommentare: Typen, Verwendung und Best Practices
  5. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  6. Java Strings meistern: Erstellung, Methoden und Best Practices
  7. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  8. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  9. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  10. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität