TDa n°9 POO 2

Les fichiers JAR

Sara Bouchenak (Sara.Bouchenak@imag.fr)

 

Objectifs : Créer et utiliser les fichiers d’archives Java (fichiers .jar)

  1. Opérations de base

  2. Exécution d'applets et d'applications à partir de fichiers JAR

  3. Modification du MANIFEST d'un JAR

  4. Synthèse

  5. Références

 

1         Opérations de base 

1.1         Création d’un fichier Jar

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 .

1.2         Visualisation du contenu d’un fichier Jar

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

1.3         Extraction du contenu d’un fichier 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.

1.4    Modification d’un fichier Jar

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.

2    Exécution d'applets et d'applications à partir de fichiers JAR

Un fichier Jar peut contenir :

2.1    Exécution d'une applet à partir d’un fichier Jar

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 !

2.2    Utilisation d'une librairie Jar

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.

2.3    Exécution d'une application Java en ligne de commande à partir d’un fichier Jar

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).

3    Modification du MANIFEST d'un 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.)

3.1    Application dans un fichier Jar

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

3.2    Extensions à télécharger

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

3.3    Modification du MANIFEST

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.

 

4    Synthèse

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>

5    Références

Les exemples utilisés ici sont issus des sources suivantes :