2017-09-25 2 views
8

Ich folge der Jigsaw quickstart here. Ich lief erfolgreich den jlink Befehl gegeben:Wie führe ich Bilder aus, die von JDK 9 jlink erzeugt wurden?

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp 

, dass eine „Laufzeitbild“ erzeugt, die eine auseinandergezogene Verzeichnisstruktur ist, die wie folgt aussieht:

~ tree -d greetingsapp 
greetingsapp 
├── bin 
├── conf 
│   └── security 
│    └── policy 
│     ├── limited 
│     └── unlimited 
├── include 
│   └── darwin 
├── legal 
│   └── java.base 
└── lib 
    ├── jli 
    ├── security 
    └── server 

Wie kann ich das laufen? Ich habe eine binäre ausführbare Datei erwartet, keine explodierte Verzeichnisstruktur.

Das Verzeichnis bin enthält eine java und eine keytool. Ich sehe keine .jar-Dateien oder .class-Dateien, die über die mitgelieferte ausführbare Datei java ausgeführt werden.

+2

Ich antwortete diese vor einer Weile: https://stackoverflow.com/questions/44085367 –

Antwort

4

ausführen zu können, dies tun:

greetingsapp/bin/java -m com.greetings/com.greetings.Main 

Oder können Sie einen Launcher-Skript bauen JLINK, die dieses

jlink --module-path $JAVA_HOME/jmods:mlib --add-modules com.greetings --output greetingsapp --launcher launch=com.greetings/com.greetings.Main 

tut und dann laufen mit:

greetingsapp/bin/launcher 

Bilden Sie die gleiche Dokumentation: -

$ java -p mods -m com.greetings/com.greetings.Main 

könnte die Main Klasse von der Modulstruktur ohne Verknüpfung mit jshell auch ausgeführt werden, ausgeführt.


Auch jlink ist das Linker-Tool und kann verwendet werden, um eine Reihe von Modulen zu verbinden, zusammen mit ihren transitiven Abhängigkeiten, ein benutzerdefinierten modulares Laufzeitbild als Modular Runtime Images genannt zu schaffen, die erreicht werden können, unter Verwendung von die JMOD tool eingeführt mit Java 9 Modulen. Wie in den Kommentaren darauf hingewiesen und von @Jorn beantwortet, wenn Sie einfach die Hauptklasse ausführen möchten.

Sie Ihre Anwendung mithilfe der Java-Binary in der Bin Ordner des erzeugten Bildes ausgeführt werden kann, und mit dem Befehl:

java com.greetings.Main 

Auf der anderen Seite, ein Beispiel zum Erstellen einer JMOD-Datei, die als Modul weiter verwendet werden kann, ist:

jmod create --class-path mods/com.greetings --cmds commands 
    --config configfiles --header-files src/h --libs lib 
    --main-class com.greetings.Main --man-pages man --module-version 1.0 
    --os-arch "x86_x64" --os-name "Mac OS X" 
    --os-version "10.10.5" greetingsmod 

EDIT: Erweitert + geklärt, um die Antwort zu haben, die ich suchte.

+0

Dieser erste Befehl verwendet nicht jlink oder die von jlink überhaupt erzeugte Ausgabe. Das verwendet das System Java und die kompilierten .class-Dateien im Verzeichnis 'mods'. – clay

+0

@clay korrekt. das habe ich auch erwähnt * aus der Modulstruktur. * .. um es klarzustellen. – nullpointer

+0

eine zusätzliche Frage wäre: Wie Debuggen Sie das benutzerdefinierte Bild? Der -Xdebug funktioniert nicht – madduci

Verwandte Themen