index

JAR : Java Archive

Ajouter des classes au classpath d'un JAR

Vous pouvez avoir à référencer des classes d'un autre fichier JAR à l'intérieur d'un fichier JAR.

Par exemple, une situation typique est un applet contenu dans un fichier JAR, et dont le manifeste référence un (ou plusieurs) fichier JAR différent qui servent d'utilitaire pour l'éxécution de cet applet.

Vous spécifiez les classes à inclure dans le champs d'en-tête "Class-Path" du fichier manifest d'un applet ou d'une application.

L'en-tête Class-Path prend la forme suivante:
Class-Path: jar1-name jar2-name directory-name/jar3-name

En utilisant ce champs "Class-Path" du manifest, vous pouvez éviter de spécifier un long -classpath quand vous invoquerez java pour éxécuter votre application.

Remarque: L'en-tête Class-Path pointe vers des classes ou des fichiers JAR dans le réseau local, pas des fichiers JAR à l'intérieur du Fichier JAR ou des classes accessible par des protocoles Internet. Pour charger les classes à l'intérieur d'un JAR à l'intérieur d'un fichier JAR du classpath, il faut modifier le classloader.
Par exemple, si MyJAR.jar contient un autre fichier jar appelé MyUtils.jar, vous ne pouvez pas utiliser l'entête Class-Path du manifeste de MyJar.jar pour charger des classes contenues dans MyUtils.jar

Un exemple

Nous voulons charger des classes de MyUtils.jar pour utiliser MyJar.jar. Ces 2 fichiers Jar sont dans le même directory.

Nous créons d'abord un fichier texte nommé Manifest.txt contenant:

Class-Path: MyUtils.jar

Attention: Le fichier texte doit se terminer avec une nouvelle ligne ou un retour chariot.
La dernière ligne ne sera pas parsée correctement si elle ne se termine pas par un retour chariot ou une nouvelle ligne.

Nous créons un fichier JAR appelé MyJar.jar en entrant la commande suivante:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class

Cela créera le fichier JAR avec un manifest contenant:

Manifest-Version: 1.0
Class-Path: MyUtils.jar
Created-By: 1.6.0 (Sun Microsystems Inc.)

Les classes de MyUtils.jar sont maintenant chargé dans le class path quand vous exécutez MyJar.jar.

Traduction de :