Introduction
Le format d’archive Java, JAR vous permet de regrouper plusieurs fichiers
en un seul grâce à une compression de type ZIP.
De manière générale un fichier JAR contiendra les fichiers
.class ainsi que les ressources auxiliaires associées à l’application
ou à l’applet.
L’intérêt ne s’arrète évidemment pas la
puisque ce format offre de nombreuses fonctionalités comme par exemple
la possibilité d’éxécuter (lien vers partie éxécution)
simplement, voir automatiquement votre application.
Voici les principaux avantages qu’apportent les fichiers JAR :
-Sécurité : il est possible de signer numériquement
le contenu de l’archive.
-Rapidité dans les downloads : si votre applet est archivé
en JAR, les fichiers class et les ressources associés pourront être
downloader vers le navigateur avec une seule transaction http sans avoir besoin
d’ouvrir une nouvelle connexion pour chaque fichier.
-Taille réduite : le format JAR permet de compresser les données
(format ZIP)
-Portabilité : la gestion des fichiers JAR est un standard de
la plateforme Java.
-Vérrouillage de packages : il est possible de vérrouiller
les contenus d’un fichier JAR.
-Exécution : le format JAR permet une éxécution
facile et rapide des fichiers qu’il contient.
-Extension : le format JAR est utilisé par les extensions de
la plate forme Java.
Avant de s’intéresser aux fonctionnalités avancées
telles que l’éxécution ou la signature d’archive nous
allons d’abord étudier les principes de bases, telle que la création
d’un fichier JAR (commandes et options au travers d’un exemple).
Nous verrons ensuite le fonctionnement de l’extraction et de la visualisation
de nos archive.
La compréhension du fichier Manifest est indispensable,
c’est pourquoi une partie lui sera consacrée avant de nous pencher
sur l’éxécution d’une application ou d’une applet
depuis le format JAR
1. Création d'un fichier JAR
Commandes et options
La commande de base pour la création d’un fichier JAR est très
simple :
jar cf nom-jar noms-fichiers
Voyons les arguments et les options de cette commande en détail :
Tout d’abord « nom-jar » correspond au nom qui sera donné
a votre archive, l’option « cf » indique que l’on désire
que notre archive soir crée dans un fichier, en l’occurrence le
fichier « nom-jar ». L’option « c » correspond
à la crétion et « f » au fichier, leur ordre importe
peu, cependant il est impératif que ces options ne soient pas séparées
par un espace.
L’argument « noms-fichiers » est la liste des fichiers qui
seront archivés. Il peut y avoir un ou plusieurs fichiers, dans le deuxième
cas, ces derniers seront séparés par des espaces. Dans le cas
de dossiers, le contenu de ces derniers sera ajouté à l’archive.Cette
commande va donc crée une archive de nos fichiers dans le dossier courant.
Voyons maintenant quelques options que vous pouvez ajouter à votre commande
:
v : crée une sortie indiquant le nom de chaque fichier ajouté
à notre archive
0 : utilisé pour que les fichiers ne soient pas compréssés
m : indique que l’on ne désire pas la création d’un
fichier Manifest par défaut, nous aborderons plus
en détail les fichiers manifest ultérieurement dans cet article
-c : permet de ne pas garder l’arborescence des fichiers lorque l’on
archive des dossiers
Afin de mieux comprendre cet outil, nous allons nous intéresser à
un exemple
Exemple
Prenons une application Helloworld (original n’est-ce pas ?), organisé
de cette manière :

Notre dossier Helloworld contient un fichier class Helloworld.class ainsi qu’on
dossier avec les images utilisés par l’application.
Pour archiver ces fichiers vous pouvez utiliser la commande :
jar cvf Helloworld.jar Helloworld.class images
Un fichier JAR Helloworld sera alors crée dans le fichier courant, contenant
notre .class ainsi que le dossier image et son contenu.
L’option « v » nous a permis d’avoir cet affichage :
adding: Helloworld.class (in=25) (out=20) (deflated 20%)
adding: images/ (in=0) (out=0) (stored 0%)
adding: images/bouton.gif (in=128) (out=130) (deflated -1%)
adding: images/bonhomme.gif (in=153) (out=156) (deflated -1%)
L’on peut voir que notre fichier est compressé, en effet l’option
par défaut réalise la comprésion, il faut donc utilisé
la ligne
jar -cvf Helloworld.jar Helloworld.class images
pour ne pas compresser notre archive.
Il est possible d’utiliser le symbole « * » pour archiver
la totailté du repertoire courant
jar -cvf Helloworld.jar *
Si vous desiré mettre tous vos fichiers au même niveau dans votre
archive, vous pouvez utiliser l’option –c :
jar cf Helloworld.jar Helloworld.class –c images
Le contenu de votre fichier sera alors :
META-INF/MANIFEST.MF
Helloworld.class
bouton.gif
bonhomme.gif
La même commande sans l’option « -c » donnera :
META-INF/MANIFEST.MF
Helloworld.class
images/bouton.gif
images /bonhomme.gif
2. Extraction et visualisation
Maintenant que nous avons vu la création de nos fichiers, intéressont
nous à leur visualisation et extraction.
2.2. Extraction
La commande de base pour l’extraction d’un fichier JAR est la suivante
:
jar xf nom-jar [noms-fichiers]
nom-jar est le fichier JAR que nous voulons extraire, l’option «
x » permet de réaliser l’extraction, et l’option «
f » indique que le nom du fichier à extraire va être passé
en ligne ligne de commande.
L’argument « noms-fichiers » permet quant à lui de
désigner les fichiers que l’on désire extraire, si jamais
il n’est pas utilisé, la totailté de l’archive est
alors extraite.
Les fichiers sont copiés depuis l’archive vers le répertoire
courant, l’archive reste inchangé, cependant s’il existe
deja des fichiers portant le même nom dans le répertoire, ces derniers
seront éffacés.
Par exemple, si nous désirons extraire notre fichier Helloworld.jar
:
jar xf Helloworld.jar Helloworld.class images/bouton.gif images/bonhomme.gif
Le fichier « Helloworld.class » est copié, le répertoire
« images » est crée et les fichiers « bouton.gif, bonhomme.gif
» sont copiés dedans.
2.2. Visualisation
La commande de base pour la visualisation d’un fichier JAR est la suivante
:
jar tf nom-jar
L’option « t » indique que nous voulons visualiser le contenu
de notre archive, « f » indique que le nom de l’archive sera
passé en argument et bien sur « nom-jar » est le nom ou le
chemin complet du fichier que l’on veut voir.
Pour notre exemple cette commande affichera :
META-INF/MANIFEST.MF
Helloworld.class
images/
images/bouton.gif
images /bonhomme.gif
L’option « v » permettra d’obtenir des informations
supplémentaires :
256 Wed May 5 15:28:37 PDT 2004 META-INF/MANIFEST.MF
20 Wed May 5 15:28:37 PDT 2004 Helloworld.class
0 Wed May 5 15:28:37 PDT 2004 images/
130 Wed May 5 15:28:37 PDT 2004 images/cross.gif
156 Wed May 5 15:28:37 PDT 2004 images/not.gif
3. Le fichier Manifest
Lors de la première partie nous avons abordé les différentes
options de création d’un fichier JAR, nous allons désormais
voir plus en profondeur l’option « m » qui permet de traiter
le fichier Manifest.
En effet si l’option « m » n’est pas spécifiée,
un fichier META-INF/MANIFEST.MF est alors ajouté à notre archive.Il
est possible d’utilisé les fonctions avancés de nos fichiers
JAR, comme le vérrouillage de package, en modifiant ce fichier.
jar cmf fichier-manifest nom-jar noms-fichiers
Le principe de cette commande est le suivant :
Un fichier texte contenant les informations que l’on désire ajouté
au fichier Manifest par défaut doit avoir préalablement été
crée, il s’agit de l’argument « fichier-manifest »,
cette commande va donc lors de la crétion de notre archive ajouté
notre fichier texte au fichier par défaut.
Les autres options et argument de cette commande sont détaillés
dans la partie Création d’un fichier JAR (lien)
Prenons comme exemple le vérrouillage d’un package :
Nous possédons 2 packages que nous désirons verrouiller :
mesPackages/premier/
mesPackages/second/
De manière à effectuer cette tâche nous devons écrire
un fichier texte « package » contenant les lignes suivantes :
Name: mesPackages/premier/
Sealed: true
Name: mesPackages/premier/
Sealed: true
Notre fichier doit impérativement se terminer par une nouvelle ligne
ou un retour, de manière à être intégrés dans
le fichier par défaut sans problèmes.
Il n’est pas nécessaire d’écrire la totalité
du fichier Manifest puisque notre texte sera ajouté au fichier par défaut.
La commande pour crée notre archive en modifiant le fichier Manifest
avec notre fichier « package » sera la suivante :
jar cmf package nom-jar noms-fichiers
Le fichier Manifest de notre archive prendra donc cette forme :
Manifest-Version: 1.0
Name: mesPackages/premier/
Sealed: true
Name: mesPackages/premier/
Sealed: true
4. Compréhension du fichier Manifest
Les archives JAR offrent de nombreuses fonctionnalités telles que le
vérouillage de package, la signature électronique, la création
d’extension par exemple. Ce que rend cela possible est le fichier Manifest.
Ce fichier contient des informations à propos du contenu de l’archive
et offre donc de nombreuses possibilités. Avant de nous y plonger, voyons
tout d’abord le contenu du fichier Manifest par défaut qui est
crée si vous n’utilisez pas l’option «
m »
En effet quand vous créez une archive JAR un fichier Manifest par défaut
y est ajouté.
Il ne peut y avoir qu’un seul Manifest par archive, son chemin est toujours
le suivant :
META-INF/MANIFEST.MF
Le contenu de ce fichier est simple : Manifest-Version: 1.0, car il ne contient
pas d’information à propos des autres fichiers, c’est information
seront rajoutés si vous désirez utilisez les fonctionalités
avancés des fichiers JAR.
Il faut donc ajoutés des informations à ce fichier, nous allons
donc nous penchez sur les principales fonctionnalités ainsi que les moyens
de les mettre en œuvre au travers du fichier Manifest.
Application
Si votre fichier contient toutes les données d’une application,
pour permettre l’éxécution de cette dernière
il faut rajouter l’entête « Main-Class » suivi du nom
de la classe:
Main-Class: nom-classe
Vérouillage de package
Il est possible d’assurer le vérrouillage de package, pour cela
on utilise l’entête « Name » suivi de l’entête
« Sealed » :
Name: mesPackages/premier/
Sealed: true
L’entête Name prend la valeur du chemin du package, l’entête
« Sealed » prend la valeur « true ».
Ces deux lignes ne sont pas séparées, en effet du moment qu’il
n’y a pas de saut de ligne entre deux entêtes, on considère
qu’ils sont liés, la valeur « true » s’applique
donc à « mesPackages/premier/ ».
Quelques règles concernant ce fichier
• La ligne Manifest-Version est toujours la première, l’ordre
du reste des entête n’est pas important.
• L’entête Name doit contenir un nom, chemin complet d’un
fichier ou une URL complète
• Un entête non compris est ignoré
• Les entêtes sont sensibles à la casse
5. Exécution d’un fichier JAR
Maintenant que nous avons vu comment crée nos fichiers JAR, ainsi que les
moyens de disposer de certaines de leurs fonctionnalités, nous allons voir
comment les éxécuter.
Prenons le cas d’une application que nous désirons lancer depuis
la ligne de commande, la commande est alors la suivante :
java -jar nom-jar
-jar indique à l’interpreteur de commande que notre application
est archivé.
« nom-jar » est bien évidemment le nom ou le chemin de notre
archive.
Pour que l’éxecution s’effectue correctement à partir
de cette ligne de commande, il faut que le fichier Manifest par défaut
est été modifié comme vu précedemment.
Reprenons notre exemple du début de manière à synthétiser
la totalité du processus :
Création du fichier Manifest (monManifest.txt):
Main-Class: Helloworld.class
Création de l’archive :
jar cmf monManifest.txt Helloworld.jar Helloworld.class images
Exécution de l’archive:
java -jar Helloworld.jar
Nous avons donc avec cet article abordé le traitement des fichiers JAR,
ils pourront être d’une grande utilité dans le processus
de vie de vos applications.
Pour toutes informations supplémentaires n’hésitez pas à
m’écrire.
|