Déploiement d'applications
Création d’archives (JAR, WAR)
1. Présentation
Une archive Java est un format de fichier particulier permettant de regrouper dans un seul fichier (l’archive) plusieurs autres fichiers. En général, on regroupe ainsi tous les fichiers nécessaires au fonctionnement d’une application. Ceci comprend bien sûr les fichiers .class mais également toutes les autres ressources indispensables au bon fonctionnement de l’application. Cette possibilité de regroupement procure de nombreux avantages pour le déploiement d’applications.
-
Le premier, et certainement le plus appréciable, réside dans le fait que le déploiement d’une application se résume à la recopie d’un seul et unique fichier sur le poste client ou le serveur distant, même si l’application exige pour son fonctionnement plusieurs ressources organisées sous forme d’une arborescence bien précise. Cette arborescence est créée à l’intérieur du fichier archive et n’a pas besoin d’être reproduite sur le poste client ou le serveur distant.
-
Les fichiers d’archives peuvent être compressés afin d’optimiser leur stockage et leur transfert sur un réseau.
-
L’application peut embarquer l’ensemble des ressources nécessaires et un environnement d’exécution Java minimaliste nécessaire à l’exécution de l’application sans devoir installer le JRE.
2. Manipulation d’une archive
La manipulation d’une archive Java (fichier JAR - Java ARchive) reprend les mêmes principes que la manipulation d’une archive dans le monde Unix avec la commande tar. La commande standard de manipulation d’archives Java est la commande jar. Elle fait partie des outils fournis avec le JDK et se trouve dans le répertoire bin de l’installation du JDK. Les options de la commande jar, destinées à gérer un fichier JAR, ressemblent beaucoup à celles de la commande tar d’Unix. Le format utilisé en interne par les fichiers d’archive Java est également bien connu puisqu’il s’agit du format ZIP. Il est donc possible de manipuler un fichier JAR avec des outils dédiés aux archives ZIP.
Un fichier JAR contient...
Création d’applications natives
Java, bien qu’historiquement associé à la portabilité grâce à la JVM (Java Virtual Machine), permet également de créer des applications natives. Ces applications s’exécutent directement sur le système d’exploitation sans avoir besoin d’une JVM externe, ce qui peut améliorer les performances et simplifier le déploiement.
La création d’une application native en Java repose principalement sur l’utilisation des outils fournis par le JDK, notamment jmod, jdeps, jlink, et jpackage. Ces outils permettent de réduire la taille de l’application, d’optimiser les dépendances et de générer une runtime minimale (c’est-à-dire un environnement d’exécution Java optimisé contenant uniquement les composants nécessaires pour faire fonctionner l’application) adaptée aux besoins spécifiques de votre programme.
Depuis Java 9, l’API Java est modulaire. L’une des conséquences est qu’il n’est nécessaire, à l’exécution, de charger les modules dont dépend une application pour qu’elle fonctionne. Oracle est allé encore plus loin en permettant de créer une arborescence de répertoires et de fichiers contenant ces modules, l’outil java et l’archive d’une application. Ce répertoire peut être facilement compressé ou intégré à un installeur pour le déployer sur les machines cibles. Un exemple d’utilisation de l’outil jpackage montrera la création d’un installeur un peu plus loin dans ce chapitre.
Depuis Java 9, l’API Java repose sur une architecture modulaire. L’une des conséquences de cette évolution est qu’à l’exécution, seuls les modules explicitement requis par une application doivent être chargés pour assurer son bon fonctionnement. Oracle a poussé cette logique plus loin en introduisant la possibilité de générer une arborescence de fichiers et de répertoires contenant les modules nécessaires, l’outil java lui-même, ainsi que l’archive de l’application. Ce répertoire peut ensuite être compressé...
Externalisation des paramètres
L’application ainsi packagée est opérationnelle. Le principal problème restant est la chaîne de connexion à la base de données qui est écrite en dur dans la classe TestPreparedStatement. Il est nécessaire de l’externaliser pour pouvoir la modifier en fonction du contexte. Cela nécessite de modifier le programme avant de le repackager.
1. Création du fichier de configuration
En Java, les fichiers de configuration sont souvent des fichiers properties ou des fichiers xml. Dans le cadre de cet ouvrage, un fichier properties a été utilisé.
Un fichier de ce type contient des couples clé/valeur écrits sur une ligne sous la forme suivante :
uneClé=uneValeur
uneAutreClé=uneAutreValeur
Le séparateur entre la clé et la valeur est le caractère =.
Pour créer un tel fichier, suivez la procédure suivante :
Créez un répertoire conf (le nom n’a aucun impact) à la racine du projet. Il ne faut pas le mettre dans le répertoire src car il n’a pas pour finalité d’être incorporé dans l’archive.
Faites un clic droit sur ce répertoire pour créer un nouveau fichier.
Saisissez un nom pour le fichier (application.properties par exemple).
Validez la création du nouveau fichier.
À l’issue de cette étape, le projet doit avoir l’aspect suivant :
.
|-- conf ...Création d’un installeur avec jpackage
Un nouvel outil a fait son apparition dans l’écosystème Java : jpackage. L’objectif de cet outil est de créer un installeur permettant de faciliter le déploiement d’une application. Cet outil permet de générer un installeur adapté à la plateforme sur laquelle il est exécuté. Dans le cadre d’une machine Linux, le fichier généré par défaut est un fichier *.deb. Dans le cas d’une machine macOS, ce sera un *.dmg. Dans le cas d’une machine Windows, ce sera un fichier *.exe.
Ce fichier est ensuite exécutable pour installer l’application qu’il contient. Sur Linux, ce sera installé en utilisant la commande suivante :
sudo apt install ./monFichierDExtensionDeb
L’outil jpackage contient un grand nombre d’options permettant de configurer l’installeur. Une présentation de l’outil est disponible dans la documentation officielle sur le site d’Oracle à l’adresse suivante : https://docs.oracle.com/en/java/javase/21/jpackage/packaging-overview.html
Conclusion
Ce chapitre a permis de découvrir quelques aspects du déploiement d’une application écrite en Java. Dans un contexte professionnel avec un projet plus complexe, il sera bien sûr nécessaire d’approfondir le sujet. Toutefois, ces quelques pages permettent de bien démarrer.