Créer un fichier jar

Un fichier "jar" (pour Java ARchive) est un fichier compressé au format ZIP qui contient les classes (fichiers au suffixe ".class") d'une application Java, ainsi que toutes les ressources utilisées (images, sons, etc.).

Les avantages

Il y a plusieurs avantages à l'utilisation du format "jar". Les plus importants sont la taille réduite de l'application, à cause de la compression des fichiers, et le nombre réduit de requêtes HTTP dans le cas d'un applet, étant donnée que toutes les ressources sont dans un seul et unique fichier.

Création du fichier jar

La plupart des IDE permettent la création plus ou moins automatisée de fichiers jar, mais voyons comment le faire sur la ligne de commande. La syntaxe est la suivante :

jar cf fichier-jar fichiers-d'entrée

L'option "c" signifie qu'on veut créer une archive (et non en extraire le contenu) et l'option "f" signifie qu'on veut envoyer l'archive dans un fichier et non sur la sortie standard.

Par exemple, pour créer une archive de la classe Classe1.class, on entre la commande suivante :

jar cf app.jar Classe1.class

Autres exemples :

jar cf app.jar Classe1.class Classe2.class
jar cf app.jar *.class
jar cf app.jar Classe1.class repertoire_sons repertoire_images

Maintenant, exécutons le fichier jar. La commande est la suivante :

java -jar app.jar
aucun attribut manifest principal dans app.jar

Que se passe-t-il donc?

C'est que l'interpréteur Java ne sait par ou commencer son travail, qu'il ignore le point d'entrée de l'application! D'accord, puisqu'il n'y a qu'une classe, il aurait pu deviner, mais bon.

Spécifier le point d'entrée

Vous ne l'avez peut-être pas remarqué, mais la création du fichier jar a causé aussi la création du fichier META-INF/MANIFEST.MF (vous pouvez le voir en "dézippant" le ficher jar).

Le fichier MANIFEST.MF peut contenir toutes sortes de méta-données, dont la plus importante est certainement le point d'entrée de l'application.

Pour spécifier ce point d'entrée, créez un fichier texte (jeu de caractères utf-8) avec le contenu suivant (le fichier doit se terminer par une ligne vide).

Contenu du fichier "entree.txt" :

Main-Class: Classe1

On peut maintenant créer notre fichier jar en spécifiant le point d'entrée de l'application avec l'option "m" :

jar cfm app.jar entree.txt Classe1.class

Si on ouvre le manifeste, on verra que son contenu est maintenant :

Manifest-Version: 1.0
Created-By: 1.7.0_21 (Oracle Corporation)
Main-class: Classe1

Et pour exécuter on fait encore :

java -jar app.jar

Sauf que cette fois ça fonctionne!

On peut aussi, depuis le JDK 6, spécifier le point d'entrée sans modifier directement le manifeste en utilisant l'option "e". Dans l'exemple suivant, on indique à la commande "jar" que le point d'entrée de l'application est la classe Classe :

jar cfe app.jar Classe1 Classe1.class

Intégrer un applet à partir d'un fichier jar

On utilise la balise “archive”.

Exemple :

<applet
   code="Classe1.class"
   archive="app.jar"
   width="640"
   height="480">
</applet>