2017-09-25 8 views
8

Je suis la scie sauteuse quickstart here. J'ai couru avec succès la commande jlink donnée:Comment exécuter des images générées par JDK 9 jlink?

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

qui produit une « image d'exécution » qui est une structure de répertoire éclaté qui ressemble à:

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

Comment puis-je exécuter cela? Je m'attendais à un exécutable binaire, pas à un arbre de répertoire explosé. Le répertoire bin a un java et un keytool. Je ne vois aucun fichier .jar ou fichier .class à exécuter via l'exécutable java fourni.

+2

J'ai répondu à cette question il y a quelques temps: https://stackoverflow.com/questions/44085367 –

Répondre

4

Pour exécuter, faites ceci:

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

Ou bien, vous pouvez avoir JLINK construire un script de lancement qui fait cela

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

puis exécuté avec:

greetingsapp/bin/launcher 

Former la même documentation: -

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

pourrait être exécuté pour exécuter la classe Main de la structure du module sans lien avec l'aide jshell aussi bien.


En outre, jlink est l'outil de liaison et peut être utilisé pour relier un ensemble de modules, avec leurs dépendances transitives, pour créer une image d'exécution temporelle modulaire personnalisé appelé Modular Runtime Images qui peut être réalisée en utilisant le JMOD tool introduit avec les modules Java 9. Comme indiqué dans les commentaires et répondu par @Jorn si vous avez simplement l'intention d'exécuter la classe principale.

Vous pouvez exécuter votre application en utilisant le binaire java dans le bac dossier de l'image générée, et en utilisant la commande:

java com.greetings.Main 

D'autre part, un exemple de créer un fichier JMOD à utiliser en tant que module est:

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: étendu + clarifié pour avoir la réponse que je cherchais.

+0

Cette première commande n'utilise pas du tout jlink ou la sortie générée par jlink. Cela utilise le système Java et les fichiers .class compilés dans le répertoire 'mods'. – clay

+0

@clay correct. c'est ce que j'avais aussi mentionné * de la structure du module. * .. mis à jour pour le rendre clair. – nullpointer

+0

une question supplémentaire serait: comment déboguer l'image personnalisée? Le -Xdebug ne fonctionne pas – madduci