Création d'archive


Le projet

Supposons que votre projet soit organisé suivant la hierarchie suivante, dans trois paquetages dont la racine est située en dessous du répertoire projet:

projet/paquet1/Util.java
              /Util.class
      /paquet2/Personne.java
              /Personne.class
      /paquet3/Principal.java
              /Principal.class
	      /Repertoire.java
	      /Repertoire.class     

On suppose ici que Principal est la classe prinicpale qu'il faut appeler pour exécuter le programme (elle crée un répertoire et des personnes en utilisant des utilitaires).

Une archive du projet

Afin de créer une archive de ce projet, on peut utiliser des outils comme WinZip (sous Windows, qui crée une archive ZIP) ou comme la commande tar Unix qui permet de créer une archive compressée. Par exemple, depuis le répertoire parent de projet, la commande tar suivante

% tar zcvf projetToto28032003.tgz projet/*
projet/paquet1/
projet/paquet1/Util.class
projet/paquet1/Util.java
projet/paquet2/
projet/paquet2/Personne.class
projet/paquet2/Personne.java
projet/paquet3/
projet/paquet3/Repertoire.class
projet/paquet3/Repertoire.java
projet/paquet3/Principal.class
projet/paquet3/Principal.java
crée un fichier de nom projetToto28032003.tgz qui contient toute l'arborescence listée ci-dessus.

Si un utilisateur récupère un tel fichier, afin de désarchiver/décompresser une telle archive, il pourra utiliser la commande

% tar zxvf projetToto28032003.tgz
Taper "man tar" dans une fenêtre de commande Unix pour obtenir le manuel complet d'utilisation de tar.

Une autre manière, permettant d'être indépendant de la plateforme, consiste à utiliser la commande "jar" qui utilise Java pour créer une Java ARchive. L'usage de cette commande est précisément décrite dans la documentation dont vous disposez sur vos machines, à l'URL /docs/guide/jar/index.html sou le répertoire de base d'installation de Java. Brièvement, voici comment s'utilise cette commande pour créer une archive:

jar cvf projetToto28032003.jar projet/*
manifest ajouté
ajout : projet/paquet1/(entrée = 0) (sortie = 0)(0% stocké)
ajout : projet/paquet1/Util.class(entrée = 5471) (sortie = 4360)(20% compressés)
ajout : projet/paquet1/Util.java(entrée = 118) (sortie = 99)(16% compressés)
ajout : projet/paquet2/(entrée = 0) (sortie = 0)(0% stocké)
ajout : projet/paquet2/Personne.class(entrée = 722) (sortie = 418)(42% compressés)
ajout : projet/paquet2/Personne.java(entrée = 344) (sortie = 177)(48% compressés)
ajout : projet/paquet3/(entrée = 0) (sortie = 0)(0% stocké)
ajout : projet/paquet3/Repertoire.class(entrée = 636) (sortie = 402)(36% compressés)
ajout : projet/paquet3/Repertoire.java(entrée = 511) (sortie = 274)(46% compressés)
ajout : projet/paquet3/Principal.class(entrée = 953) (sortie = 599)(37% compressés)
ajout : projet/paquet3/Principal.java(entrée = 475) (sortie = 278)(41% compressés)

L'extraction de l'arborescence de cette archive projetToto28032003.jar se fait par la commande:

% jar xvf projetToto28032003.jar

Un jar exécutable

Tous les fichiers placés dans cette archive sont indispensables pour pouvoir compiler ou modifier l'application. En revanche, seuls les fichiers d'extension ".class" sont requis pour l'exécution (le bytecode des classes).

Il est possible de créer un fichier, dit jar exécutable qui peut ne contenir que les fichiers de bytecode et qui précise quelle classe doit être appelée en premier en cas d'exécution. Il suffit de créer un fichier monManifest contenant la simple ligne suivante sous le répertoire projet:

Main-Class: paquet3.Principal
et puis créer l'archive exécutable, depuis le répertoire projet, par:
projet% jar cvmf monManifest archiveExecutable.jar paquet*/*.class

Vous pourrez alors vérifier qu'avec ce seul fichier archiveExcecutable.jar, il est possible d'exécuter l'application grâce à la commande:

% java -jar archiveExcecutable.jar