Bonjour

j'ai un problème assez basique avec java, et je pense que je dois mal faire quelque chose, mais je n'arrive pas à exécuter une classe java depuis un autre répertoire que celui dans lequel elle a été compilée.


Je fais des tests avec un code très simple qui se contente d'afficher le classpath en cours !
Je commence dans le répertoire test_cp, et je compile le fichier pac/PrintClasspath.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
javac pac/PrintClasspath.java
La classe PrintClasspath appartient au package pac.
J'appelle la classe avec la commande

Code : Sélectionner tout - Visualiser dans une fenêtre à part
java pac/PrintClasspath
Tout fonctionne jusque-là.

Maintenant je change de répertoire. Je me place pour les tests dans le répertoire parent avec cd ..
Je rappelle la classe avec la commande

Code : Sélectionner tout - Visualiser dans une fenêtre à part
java -cp test_cp: test_cp/pac/PrintClasspath
et là ça ne marche pas. J'obtiens le message suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Exception in thread "main" java.lang.NoClassDefFoundError: test_cp/pac/PrintClasspath (wrong name: pac/PrintClasspath)
Je comprends d'après ce message qu'il y a un problème entre la définition du chemin de la classe et le classpath utilisé. Mais je pensais que déclarer test_cp dans le classpath servait justement à éviter ce genre de problèmes.

J'ai essayé différentes variantes, comme enlever la définition du package et rajouter l'arborescence dans le classpath.

La seule chose qui marche, c'est de faire correspondre à chaque fois la définition du package au répertoire depuis lequel j'appelle la classe.

par exemple si j'appelle depuis le répertoire parent de test_cp, je dois modifier la ligne comme suit :

Je ne pense que pas ce comportement soit normal, et je suis sûr que je dois me tromper quelque part. Je dois utiliser certaines classes depuis plusieurs répertoires différents, et je ne peux pas m'amuser à changer le code source et recompiler à chaque fois !!!

Merci de votre aide