Utilisation de paquetages Java par la ligne de commande
Les paquetages standards de Java sont accessibles automatiquement par
les commandes javac
et java
(à condition bien
sûr de mettre dans son programme les directives import ...;
qui conviennent).
On va s'intéresser ici au cas de paquetages définis à partir des
fichiers sources .java
ou de paquetages qui sont fournis
sous forme de fichiers .jar
.
Quand on dispose des fichiers sources, la structure en
paquetages se traduit par des sous-dossiers dans le système de
fichier.
Supposons que l'on ait un programme qui se compose d'un fichier
A.java
pour une classe dans le paquetage par défaut, d'un fichier
B.java
pour une classe dans le paquetage un
et d'un
fichier C.java
pour une classe dans le sous-paquetage
un.deux
.
A.java
:
import un.B; import un.deux.C; public class A { public static void main(String[] args) { B.f(); } }
B.java
:
package un; import un.deux.C; public class B { public static void f() { C.f(); } }
C.java
:
package un.deux; import un.B; public class C { public static void f() { System.out.println("glop"); } public static void main(String[] args) { B.f(); } }
Cela correspond à la structure suivante dans le système de fichiers :
|-- A.java `-- un |-- B.java `-- deux `-- C.java
La racine
est le répertoire dans lequel on place les fichiers
du paquetage par défaut.
On doit rester dans ce répertoire racine
pour lancer les
commandes de compilation et d'exécution.
Par exemple, javac A.java
, noter que javac
détecte les dépendances et compile tout ce qui est nécessaire :
racine |-- A.class |-- A.java `-- un |-- B.class |-- B.java `-- deux |-- C.class `-- C.java
Si on veut ne compiler que C.java
, on reste dans
racine
et on fait javac un/deux/C.java
.
Si on voulait exécuter C
, on ferait java un/deux/C
ou java un.deux.C
toujours depuis racine
.
Remarque
Cette organisation est compatible avec l'usage d'eclipse, si on a choisi
le mode qui range les .class
avec les .java
, et
racine
est alors le répertoire du projet.
.jar
avec un paquetageDans le répertoire racine
, on entre la commande
jar cf un.jar un/B.class un/deux/C.class
où, après
jar cf
, on met le nom du fichier à construire, ici
un.jar
, puis tous les fichiers .class
voulus (on peut utiliser l'*
).
On peut maintenant effacer ou déplacer le répertoire un
.
.jar
On suppose ici que l'on n'a que les fichiers A.java
et
un.jar
construits comme ci-dessus.
On peut compiler par javac -cp "un.jar:." A.java
et
exécuter par java -cp "un.jar:." A
où, dans ces deux commandes,
l'option -cp "un.jar:."
indique le classpath qui
dit où chercher ce dont on a besoin pour compiler ou exécuter. Ici, on
regarde dans un.jar
et dans .
, ie le répertoire
courant.
Remarque
On peut aussi faire java -cp "un.jar" un.deux.C
pour
exécuter C
.