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.).
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.
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.
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
On utilise la balise “archive”.
Exemple :
<applet code="Classe1.class" archive="app.jar" width="640" height="480"> </applet>