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.
.jarOn 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.