Les paquetages servent à structurer l'ensemble des classes et interfaces écrits en Java. Leur utilité est multiple :
Mettez-vous à la place de "quelqu'un" (par exemple un compilateur) qui recherche la classe DansPaquetage en sachant qu'elle se trouve dans le paquetage coursJava.monPaquet. Supposez par ailleurs que vous disposiez d'une liste de chemins d'accès à des "répertoires racines" de paquetage (le répertoire coursJava est une telle racine) ; supposez que dans cette liste figure le chemin d'accès au répertoire coursJava. Vous pouvez retrouver la classe DansPaquetage en prenant les uns après les autres les chemins d'accès aux répertoires racines puis en complétant par le chemin relatif coursJava/monPaquet pour voir si vous trouvez la classe DansPaquetage.
De l'intérieur d'un fichier Java, on peut être dispensé de nommer complètement les classes issus d'un autre paquetage grâce à l'instruction import. Imaginons néanmoins que vous utilisiez dans un même fichier Java les classes coursJava.monPaquet. DansPaquetage et coursJava.tonPaquet.DansPaquetage, alors les directives :
Signalons que, à l'intérieur d'un même paquetage, on peut utiliser toute classe de ce paquetage sans instruction import.
Considérons la classe suivante, dont le code source se trouve dans le fichier DansPaquetage.java.
package coursJava.monPaquet;
public class DansPaquetage
{
public void faire()
{
System.out.println("bonjour depuis monPaquet");
}
}
La première ligne indique que cette classe fait partie d'un paquetage. L'instruction :
Le fichier DansPaquetage.java peut se trouver n'importe où. Vous pourrez le compiler. Mais il est nécessaire (si vous voulez utiliser la classe DansPaquetage) que la fin du chemin d'accès au fichier DansPaquetage.class soit coursJava/monPaquet/.
Il faut donc veiller à mettre les fichiers .class dans le bon répertoire.
On supposera dans les explications qui suivent que les fichiers et répertoires suivent la dispoistion ci-dessous, où une flèche sigifie :"contient".
Considérons la classe suivante qui se trouve dans un répertoire quelconque, et qui ne fait pas partie
d'un paquetage.
import coursJava.monPaquet.DansPaquetage;
class UtiliseUneClasse
{
public static void main(String[] arg)
{
(new DansPaquetage()).faire();
}
}
Lorsqu'on veut compiler cette classe, le problème pour le compilateur est de trouver la classe
coursJava.monPaquet.DansPaquetage.
Il faut lui indiquer le chemin. Une partie de cette indication est
donnée par l'instruction import, qui indique sur notre exemple que la classe
DansPaquetage se trouve dans le répertoire monPaquet et que ce répertoire se trouve
dans le répertoire coursJava. Le complément de l'indication doit être donné par l'option -cp de la commande javac. Vous pouvez indiquer à la suite de -cp les chemins absolus ou relatifs des répertoires à localiser (en les séparant par des ':' sous Unix, ou des ';' sous DOS).
Ici, supposons que la classe UtiliseUneClasse soit dans le répertoire monPaquet et qu'on veuille compiler cette classe de ce même répertoire, la commande pourrait être :
Le compilateur cherchera alors à partir du répertoire contenant coursJava dans coursJava/monPaquet, comme indiqué par le nom du paquetage, et trouvera la classe DansPaquetage.
On peut exécuter du répertoire monPaquet en envoyant la commande
Si on exécute du répertoire coursJava, la commande devient :
package autrePaquet; import coursJava.monPaquet.*; class PetitEssai { public static void main(String[] arg) { (new DansPaquetage()).faire(); } }On compile le fichier contenant cette classe comme indiqué plus haut, par la commande :
Pour exécuter la méthode main de la classe PetitEssai, il faut donner le nom long de la classe, c'est-à-dire ici >autrePaquet.PetitEssai. On peut exécuter cette méthode main du répertoire coursJava par la commande :
java -cp .:../ autrePaquet.PetitEssai
ou bien du répertoire autrePaquet par la commande :
java -cp ../:../../ autrePaquet.PetitEssai
ou de n'importe quel répertoire en utilisant les chemins convenables.
Si on suit les recommandations ci-dessus, on a la bonne surprise de voir
bonjour depuis monPaquet
Si vous voulez récupérer ces quelques programmes :
© Irène Charon, Télécom ParisTech 2011