web-dev-qa-db-fra.com

Comment exécuter des images générées par JDK 9 jlink?

Je suis le puzzle démarrage rapide ici . J'ai exécuté avec succès la commande jlink étant donné:

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

Cela produit une "image d'exécution" qui est une structure de répertoire éclatée 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? J'attendais un exécutable binaire, pas une arborescence de répertoires éclatée.

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.

14
clay

Pour exécuter, procédez comme suit:

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

Ou, vous pouvez demander à jlink de créer 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écutez 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 à partir de la structure du module sans établir de lien à l'aide de jshell également.


De plus, jlink est l'outil de l'éditeur de liens et peut être utilisé pour lier un ensemble de modules, ainsi que leurs dépendances transitives, pour créer une image d'exécution modulaire personnalisée appelée Modular Runtime Images qui peut être accompli en utilisant outil JMOD introduit avec Java 9 modules. 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 dossier bin de l'image générée, et en utilisant la commande:

Java com.greetings.Main

D'un autre côté, un exemple de création d'un fichier JMOD à utiliser en tant que module est comme suit:

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 

[~ # ~] modifier [~ # ~] : Développé + clarifié pour avoir la réponse que je cherchais.

11
Naman