Übersicht |
Das Java Platform Module System (JPMS) wurde in Java 9 eingeführt. Es ermöglicht Ihnen, Ihren Code zu organisieren, indem verwandte Pakete gemeinsam in höherklassige Module gruppiert werden, und es bietet einen Mechanismus, um die Abhängigkeiten zwischen den Modulen zu definieren. Die Modularisierung Ihrer Anwendung bietet mehrere Vorteile: - Eine Anwendung, die in Modulen organisiert ist, kann einfacher gelesen, verwaltet und besser skaliert werden. - Die Abhängigkeiten zwischen den Modulen werden durch Module Descriptors definiert, die sowohl zum Erstellungszeitpunkt überprüft werden, als auch wenn die Anwendung gestartet wird. Diese frühe Auflösung der Abhängigkeiten hilft bei der Verbesserung der Zuverlässigkeit der Laufzeit, wodurch ein seit langem bekanntes Java-Problem gelöst werden kann, bei dem "NoClassDefFoundError"-Ausnahmen eine häufige Ursache für Abstürze der Anwendung waren. - Die Pakete in einem Modul sind anderen Modulen nur zugänglich, wenn sie explizit exportiert werden. Dieses Prinzip wird Strong Capsulation (Datenkapselung) genannt und bietet standardmäßig einen sicheren Ort für den Code, in den Reflection nicht eindringen kann. - Schließlich ermöglicht Ihnen das Module System, individuelle Laufzeitbilder zu erstellen, die nur die Module enthalten, die von Ihrer Anwendung verwendet werden. Die verminderte Größe der Laufzeit-Umgebung verbessert merklich die Startzeit und den Speicherbedarf der Anwendung.
Seit Version 3.5.55 enthält der wrapper. WARNING
Vor Version 3.5.55 war wrapper. Wenn 'wrapper' in einigen Ihrer Modul-Descriptoren verwendet wird und Sie auf Wrapper-Version 3.5.55 oder neuer aktualisieren, vergessen Sie nicht, den Namen in 'org.tanukisoftware.wrapper' zu ändern. Der Wrapper bietet mehrere Eigenschaften, die Ihnen helfen, zu konfigurieren, wie Module von Ihrer Anwendung verwendet werden:
NOTEDiese Eigenschaften werden nur verwendet, wenn die Versionen Java 9 oder höher eingesetzt werden. In früheren Versionen werden sie ignoriert. |
wrapper.java.module_path.<n> |
||||||||
Diese Eigenschaften werden verwendet, um Orte aufzulisten, wo Module Ihrer Anwendung gefunden werden können. Die Liste kann Verzeichnisse oder Pfade zu jar-Dateien enthalten, sowie optional Wildcards im Bereich des Dateinamens. Der Wrapper verwendet diese Liste, um die '--module-path'-Option der Java-Befehlszeile zu erstellen. Wenn ein Wildcard-Zeichen innerhalb eines Modulpfad-Eintrags verwendet wird, werden alle entsprechenden Dateien dem Modulpfad hinzugefügt, wenn eine JVM-Instanz gestartet wird. Gültige Wildcard-Zeichen sind
NOTE
Die wrapper.
Der Wrapper verwendet die Eigenschaft wrapper.jarfile, um die wrapper. Classpath: Java gestattet nicht, dass zwei unterschiedliche jar-Dateien, die dasselbe Paket enthalten, gleichzeitig in der Modulpfadliste existieren. Dies ist nicht der Fall mit dem Classpath, bei dem historisch Paket-Überschneidungen immer zugelassen wurden. Das ist einer der Gründe, wieso der Classpath nützlich bleibt, zumindest, bis eine Anwendung vollständig in das Java-9-Modulsystem migriert werden kann.
Bitte beachten Sie die folgenden Einschränkungen: jar-Dateien, die im Classpath aufgelistet sind, und nicht an anderen Orten des Modulpfads gefunden werden können, werden von der JVM als Unnamed Module verwendet, wodurch sie naturgemäß für andere Module gesperrt sind.
Soll ein Modul in einer requires Anweisung eines anderen Moduls referenziert werden,
muss es an einem der Orte existieren, die von der Eigenschaft wrapper. Probleme?:
Wenn im Zusammenhang mit dem Modulpfad Probleme auftreten,
sollte zunächst sichergestellt werden, dass der vollständige
Modulpfad vom Wrapper generiert wird.
Dafür wird entweder die Logausgabe der Fehlersuche mit der Eigenschaft
wrapper. NOTEModulpfad, der Leerzeichen enthält: Der Wrapper verarbeitet Modulpfadelemente, die Leerzeichen enthalten, korrekt. Dies wird später vom Wrapper gemacht, indem der zuletzt generierte Modulpfad in Anführungszeichen gesetzt wird. Einzelne Modulpfadelement-Eigenschaftswerte sollten niemals mit Anführungszeichen definiert werden, selbst wenn sie Leerzeichen enthalten. |
wrapper.java.module_path.missing.loglevel |
||||||||
Standardmäßig loggt der Wrapper Warnungen über jegliche fehlenden Modulpfad-Elemente auf der DEBUG-Logebene. Es ist ziemlich üblich, die erzeugten Lognachrichten einsehen zu wollen, ohne die komplette Debugausgabe zu aktivieren. Diese Eigenschaft ermöglicht es, die Logebene zu spezifizieren, auf der die Warnungen geloggt werden. Gültige Logebenen sind:
Der Standardwert ist DEBUG.
Wenn in Ihrer Anwendung oft jars fehlen, deaktiviert die Einstellung dieses Wertes auf NONE Warnungen auf allen Logebenen. Modulpfadelemente, die als Wildcards definiert sind, loggen ebenfalls eine Warnung, wenn die Wildcard nicht wenigstens mit einer Datei übereinstimmt. Dies kann passieren, wenn das Verzeichnis fehlt oder leer ist. |
wrapper.java.upgrade_module_path.<n> |
||||||
Diese Eigenschaften definieren eine Liste, die ähnlich dem wrapper.
Ebenso wie wrapper. Der Wrapper wird mit dieser Liste die Option '--upgrade-module-path' der Java-Befehlszeile erstellen. NOTE
Die wrapper.
Der Wrapper verwendet die Eigenschaft wrapper.jarfile, um wrapper. |
wrapper.java.upgrade_module_path.missing.loglevel |
||||||||
Standardmäßig loggt der Wrapper Warnungen über jegliche fehlenden Modulpfad upgraden-Elemente auf der DEBUG-Logebene. Es ist ziemlich üblich, die erzeugten Lognachrichten einsehen zu wollen, ohne die komplette Debugausgabe zu aktivieren. Diese Eigenschaft ermöglicht es, die Logebene zu spezifizieren, auf der die Warnungen geloggt werden. Gültige Logebenen sind:
Der Standardwert ist DEBUG.
Wenn in Ihrer Anwendung oft jars fehlen, deaktiviert die Einstellung dieses Wertes auf NONE Warnungen auf allen Logebenen. Modulpfad upgraden-Elemente, die als Wildcards definiert sind, loggen ebenfalls eine Warnung, wenn die Wildcard nicht wenigstens mit einer Datei übereinstimmt. Dies kann passieren, wenn das Verzeichnis fehlt oder leer ist. |
wrapper.java.module.<n> |
||||||
Diese Eigenschaften werden verwendet, um die Namen der Root-Module aufzulisten, die von Ihrer Anwendung verwendet werden. Root-Module sind Module, die nicht in den Modulgraph gezogen werden können, wenn die Anwendung gestartet wurde, entweder weil sie von keinem anderen Modul benötigt werden oder weil es optionale Abhängigkeiten sind (d. h. sie sind in einem Modul-Descriptor als 'requires static' spezifiziert). Der Wrapper verwendet diese Liste, um die Option '--add-modules' der Java-Befehlszeile zu erstellen. Zusätzlich zu den Modulnamen kann die Liste folgende Tokens enthalten:
Detailliertere Informationen finden Sie unter OpenJDK specification. |