La communauté OpenJDK a publié une préversion de la JEP 343 : Packaging Tool. Aussi connue sous le nom de jpackage
, ce nouvel outil est capable de packager des applications Java auto-porteuses, incluant un environnement d'exécution Java (JRE).
Le groupe de l'Open JDK a publié une pré-version de la JEP 343 : Outil de Packaging. L'outil, connu sous le nom de jpackage
est un nouvel utilitaire qui permet de packager des applications Java auto-porteuses, contenant donc un Java Runtime Environment (JRE). Le prototype s'appuie sur l'outil javapackager
de JavaFX et est destiné au développeurs qui s'intéressent à jpackage
.
Historiquement, les développeurs Java ont toujours souhaité avec un moyen de construire des applications qu'ils puissent installer nativement sur des plateformes, plutôt que d'installer un Java Runtime Environment (JRE), puis de distribuer des fichiers JAR et de configurer un classpath. Avec jpackage
les applications Java peuvent dorénavant être installées et désinstallées en utilisant la façon classique liée à chaque plateforme - jpackage
supporte les formats msi et exe sur Windows, pkg et dmg sur MacOS, ainsi que deb et rpm sur Linux.
L'outil jpackage
a pour objectif de compléter les manques laissés par les autres technologies telles que :
-
javapackager
: un outil de packaging distribué avec l'Oracle JDK 8, retiré d'Oracle JDK 11 avec le reste de JavaFX ; - Java Web Start, qui a été déprécié en Java 9, en même temps que le visualiseur d'Applets et JNLP, et retiré d'Oracle JDK 11 ;
-
pack200
, un outil créé pour compresser les fichiers JAR, qui a été déprécié en JDK 11 et sera retiré dans une version future.
L'outil jpackage
supporte :
-
les applications modulaires à un environnement d'exécution propre que l'on a intégré à l'aide de
jlink
; - les applications modulaires distribuées sous forme de modules JAR ou de fichiers JMOD ;
-
de même que les applications legacy qui s'exécutent sur le
classpath
et sont composées de plusieurs fichiers JAR.
L'outil jpackage
produit l'image d'une application Java qui contient toutes les dépendances nécessaires à son fonctionnement. Cette image est enregistrée dans un répertoire unique sur le système de fichiers. Elle peut inclure les éléments suivants :
- le lanceur de l'application, natif ;
- une image du JRE, qui inclut les modules de l'application si elle a été modularisée ;
- les ressources de l'application sous forme de JAR, fichier ico ou png ;
- des fichiers de configuration : plist, cfg, properties.
Il est prévu d'inclure l'outil jpackage
dans la distribution du JDK 13 dans un nouveau module jdk.jpackage
. L'interface de ligne de commande (CLI) sera conforme à la JEP 293 : Guidelines for JDK Command-line Tool Options. En outre, il est possible d'accéder à jpackage
au traver le l'API ToolProvider
(java.util.spi.ToolProvider
) sous le nom jpackage
.
L'interface en ligne de commande de JPackage
Lorsque l'on exécute jpackage --help
une série d'informations sont affichées. Explorons quelques unes d'entre elles.
L'outil jpackage
a deux modes : create-image
, qui génère l'image de l'application propre à chaque plateforme, et create-installer
, qui génère un installateur de l'application, également propre à chaque plateforme.
On peut par exemple générer l'image d'une application modulaire avec la commande suivante :
$ jpackage create-image --output outputdir --name AppName \
--main-class package.ClassName -module moduleName -p modulePath
$ jpackage create-image --o outputdir -n AppName \
-c package.ClassName -m moduleName -p modulePath
Si l'on veut générer l'image d'une application non modulaire, on utilisera :
$ jpackage create-image --input inputdir --output outputdir \
--name AppName --main-class package.ClassName --main-jar MyJar.jar
$ jpackage create-image -i inputdir -o outputdir -n AppName \
-c package.ClassName -j MyJar.jar
On peut générer l'installateur de l'application avec :
$ jpackage create-installer -i inputdir -o outputdir \
-n -c package.ClassName -j MyJar.jar
$ jpackage create-installer -o outputdir -n \
--app-image
Si l'on veut générer un installateur pour un _Runtime Java_, on utilisera :
$ jpackage create-installer --runtime-installer\
--name --output outputdir
$ jpackage create-installer --runtime-installer \
-n -o outputdir --runtime-image
Il est intéressant de noter quelques autres points avec jpackage
. Par exemple, on peut générer des applications Java qui peuvent ensuite être soumises aux stores Windows ou MacOS. La compilation croisée ne sera pas supportée, il faudra exécuter jpackage
sur une machine Windows pour générer des packages Windows. Les écrans d'accueil natifs et les mécanismes de mise à jour automatique ne seront pas supportés. Enfin, cet outil ne sera pas disponible sur les plateformes Solaris, certaines fonctionnalités spécifiques à Java Web Start et JavaFX ne seront pas supportées, et l'outil n'aura pas d'interface graphique utilisateur.
Plus de détails sur jpackage
peuvent être trouvés sur la page de la JEP 343 : Packaging Tool. Les développeurs peuvent télécharger la pré-version pour
Windows,
MacOS et
Linux.