TDa n°9 POO
Les fichiers JAR
Sara Bouchenak (Sara.Bouchenak@imag.fr)
La commande de base pour créer un fichier Jar est :
jar cfv fichier.jar
fichier_inclus1 … fichier_inlcusn
Où :
- l’option c indique qu’il faut créer une archive Jar
- l’option f indique que le résultat sera redirigé dans un fichier
- l’option v (pour verbose) fait afficher les commentaires associés à l'exécution de la commande, en particulier, les noms des éléments ajoutés au fichier d'archive au fur et à mesure qu'ils y sont ajoutés
- fichier.jar est le nom du fichier d’archive créé
- les fichier_inclus1 … fichier_inlcusn sont une suite de noms de fichiers qui seront inclus dans l’archive ; ces noms peuvent utiliser des * ; s’ils font référence à des répertoires, leur contenu sera récursivement inclus dans l’archive.
La commande génère un fichier d’archive placé dans le répertoire courant. La commande génère également un fichier MANIFEST pour cette archive.
Pour des options supplémentaires,
consulter la documentation de la commande jar :
http://www-ufrima.imag.fr/placard/GENERAL/java/docs/tooldocs/solaris/jar.html
Considérons l'exemple d'applet Java TicTacToe. Cet exemple contient un fichier .class, des fichiers images .gif et des fichiers audio .au, contenus dans un répertoire avec la structure suivante :
Les répertoires audio et images contiennent respectivement les fichiers audio et images utilisés par l'applet.
Sur votre répertoire de travail, créez un répertoire TicTacToe en y recopiant les fichiers suivants :
è a. Donnez la ligne de commande qui permet de construire un fichier d'archive Jar nommé TicTacToe.jar qui contient l'ensemble des fichiers associés à l'exemple TicTacToe ?
è b. Exécutez cette commande en utilisant, entre autres, l'option v. Qu'est-ce qui est affiché ? Expliquer.
è c. Donnez la ligne de commande qui permet de construire un fichier TicTacToe.jar non compressé.
è d. Exécutez les deux commandes
suivantes et comparez leur résultat :
jar cf ImageAudio.jar images
audio
et
jar cf ImageAudio.jar -C images . -C audio .
La commande de base pour visualiser le contenu d'un fichier Jar est :
jar tf fichier.jar
Où :
- l’option t fait afficher la table du contenu de l'archive Jar
- l’option f indique que l'archive Jar à visualiser est contenu dans le fichier passé en paramètre
- fichier.jar est le nom du fichier d’archive créé.
La commande affiche le contenu du fichier Jar.
è a. Exécutez la commande suivante et dites ce qu'elle fait: jar tvf TicTacToe.jar
La commande de base pour extraire le contenu d'un fichier Jar est :
jar xfv fichier.jar
[fichier_a_extraire1 … fichier_a_extrairen
Où :
- l’option x indique qu’il faut extraire le contenu d'une archive Jar
- l’option f indique que que l'archive Jar considérée est un fichier passé en paramètre
- l’option v (pour verbose) fait afficher les commentaires associés à l'exécution de cette commande
- fichier.jar est le nom du fichier d’archive considéré
- éventuellement les fichier_a_extraire1 … fichier_a_extrairen qui sont une suite de noms de fichiers qui seront extrait de l’archive ; si ces noms ne sont pas spécifiés, l'ensemble du contenu de l'archive sera extrait.
Cette commande extrait le contenu du fichier Jar avec la même structure de répertoires et de fichiers ; le contenu extrait est placé dans le répertoire courant. Le fichier Jar demeure, quant à lui, inchangé.
è a. Exécutez la commande jar xfv TicTacToe.jar cross.gif Le fichier cross.gif est-il extrait de l'archive Jar ? Proposez une solution.
La commande de base pour modifier un fichier Jar est :
jar uf fichier.jar
[nouveau_fichier1 … nouveau_fichiern
Où :
- l’option u (update) indique qu’il faut mettre à jour une archive Jar
- l’option f indique que que l'archive Jar considérée est un fichier passé en paramètre
- fichier.jar est le nom du fichier d’archive considéré
- éventuellement les nouveau_fichier1 … nouveau_fichiern qui sont une suite de noms de fichiers à ajouter à l’archive.
Cette commande permet d'ajouter des fichiers à une archive Jar ou de mettre à jour des fichiers déjà contenus dans l'archive.
Copiez le fichier suivant dans votre sous-répertoire audio :
è a. Donnez la ligne de commande qui permet d'ajouter le fichier audio joy.au à l'archive TicTacToe.jar. Vérifiez que ce fichier a bien été inclus à l'archive Jar.
Un fichier Jar peut contenir :
une applet Java qui sera appelée à partir d'un navigateur Web
une application Java lancée en ligne de commande
une librairie de code utilisée par votre propre application Java.
Considérons le fichier HTML suivant qui fait appel à l'applet TicTacToe dont le code est contenu dans le fichier Jar TicTacToe.jar :
<applet code=TicTacToe.class
archive="TicTacToe.jar"
width=120 height=120> </applet>
è a. Copiez le fichier HTML suivant TicTacToe.html (avec le bouton droit de la souris) et placez-le dans le même répertoire que celui contenant l'archive TicTacToe.jar. Avec un navigateur Web, visualisez le fichier HTML : à vous de jouer !
Créez un répertoire Visage et copiez-y le fichier AppliVisage1.java
è
a.
Placez-vous dans le répertoire Visage et exécutez la commande de
compilation suivante :
javac AppliVisage1.java
Que constatez-vous ? Expliquez.
è b.
Copiez la librairie MyLib.jar dans le
répertoire Visage puis exécutez la commande de compilation suivante :
javac -classpath MyLib.jar
AppliVisage1.java
Expliquez.
è c. Donnez la ligne de commande qui permet d'exécuter le programme Java AppliVisage1.
Créez un répertoire Hello et copiez-y le fichier Jar Hello1.jar
è a. Quel est le contenu du fichier Hello1.jar ? Lancez l'application HelloWorld en exécutant la commande suivante : java -classpath Hello1.jar HelloWorld
è b. Copiez le fichier Jar Hello2.jar puis exécutez la commande suivante : java -jar Hello2.jar
Que fait cette commande ? Expliquez pourquoi c'est l'application HelloWorld qui a été exécutée par cette commande et pas un des autres programmes inclus dans le fichier Jar Hello2.jar (voir le contenu du fichier META-INF/MANIFEST.MF inclus dans Hello2.jar).
Lorsqu'un fichier Jar est créé, il contient automatiquement un fichier MANIFEST qui se trouve dans META-INF/MANIFEST.MF. Par défaut, le contenu d'un fichier MANIFEST est le suivant (avec le JDK 1.4.2) :
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Si une application est contenue dans un fichier Jar, il est possible de spécifier le point d'entrée (classe principale) de cette application dans le fichier MANIFEST de l'archive Jar de la manière suivante :
Main-Class: classname
Considérons l'exemple d'une applet dont le code utilise des extensions (des librairies). Lorsque le fichier Jar contenant le code de l'applet est téléchargé par un navigateur Web, par exemple, il faudrait que les fichiers Jar contenant le code des extensions utilisées par l'applet soient également téléchargés. Pour ce faire, le fichier MANIFEST de l'archive Jar de l'applet doit spécifier les extensions utilisées, par exemple :
Class-Path: servlet.jar infobus.jar acme/beans.jar
La commande de base pour modifier un fichier MANIFEST est :
jar umf ajout-manifest fichier.jar
[nouveau_fichier1 … nouveau_fichiern
Où :
- l’option u (update) indique qu’il faut modifier une archive Jar
- l’option m (manifest) indique que des options vont être ajoutées au MANIFEST de l'archive Jar créée
- l’option f indique que que l'archive Jar sera créée dans un fichier
- ajout-manifest est le nom d'un fichier texte qui contient les options que l'on souhaite ajouter au MANIFEST (ex. Main-Class: classname ou Class-Path: servlet.jar infobus.jar acme/beans.jar)
- fichier.jar est le nom du fichier d’archive considéré
- éventuellement les nouveau_fichier1 … nouveau_fichiern qui sont une suite de noms de fichiers à ajouter à l’archive.
è a. Faites les changements nécessaires pour que la commande java -jar Hello1.jar lance l'exécution de la classe AppliVisage1 (au lieu de HelloWorld actuellement). Donnez la ligne de commande qui permet d'effectuer ce changement.
Les fichiers d’archives Java .jar sont équivalents aux fichiers d’archives ZIP ou TAR. Voici les principales commandes de manipulation de fichier Jar :
Opération
effectuée |
Commande |
Création d’un fichier Jar |
jar cf fichier.jar fichier_inclus1 … fichier_inlcusn |
Visualisation du contenu d’un fichier Jar |
jar tf fichier.jar |
Extraction du contenu d’un fichier Jar |
jar xf fichier.jar |
Extraction de certains fichiers d’un fichier Jar |
jar xf fichier.jar fichier_extrait1 … fichier_ extrait n |
Exécution d’une application contenue dans un Jar |
java –classpath fichier.jar classe_principale |
Exécution d’une application contenue dans un Jar (classe_principale doit être spécifiée dans le fichier MANIFEST) |
java –classpath fichier.jar |
Exécution d’une applet contenue dans un Jar |
<applet
code=AppletClassName.class
archive="JarFileName.jar"
width=width height=height> </applet> |
Les exemples utilisés ici sont issus des sources suivantes :
A. Sommerrer. Trail: JAR Files. http://java.sun.com/docs/books/tutorial/jar/
A. van Hoff. TicTacToe. http://www.bodo.com/Applets/TicTacToe/