Existe-t-il un niveau de classpath pour la compilation et un autre pour l'exécution ?

a marqué ce sujet comme résolu.

Salut tout le monde,

J’aimerais faire le point sur le classpath utilisé par la JVM. En effet, j’ai l’impression qu’à la compilation (javac fichier_source.java -d ../repertoire_des_classes), un premier niveau de classpath est utilisé et à l’exécution (java -jar executable_java.jar), un second niveau est utilisé.

Par "niveau", j’entends… comment dire… environnement de lecture du classpath ? :o

Je m’explique. Dans mon $CLASSPATH j’ai mis un chemin absolu ($HOME/[...]) vers une librairie .jar et ça m’a permis de bien compiler mon projet !

Par contre à l’exécution, la librairie n’est pas trouvée : je pense que c’est parce que cette exécution utilise le chemin absolu ($HOME/[...]) alors que l’environnement d’exécution est le .jar , qui ne contient pas ma $HOME/ au moins. Donc forcément il ne trouve pas la lib.

Je ne sais pas si j’ai été très clair, mais j’espère que vous avez compris l’idée. Du coup j’ai raison ou pas ? Et si oui : comment résoudre ce problème sans modifier mon $CLASSPATH ? :o

Bonne continuation !

+0 -0

Salut !

Je n’ai jamais utilisé java -jar, cependant ce que je peux te dire, c’est que tu peux modifier le classpath directement avec les commandes javac et java.

Par défaut ton classpath est .. Lorsque tu écris javac -cp <rep> Main.java, toutes les classes nécessaires à la compilation seront cherchées dans <rep> et te générera un Main.class dans .. Pour l’exécution de ton programme, il faut également mettre <rep> dans le classpath MAIS également ton répertoire courant (qui contient Main.class) : java -cp .:<rep> Main. Ce qu’il va se passer est que toutes les classes nécessaires seront cherchées dans tous les répertoires/jar spécifiés dans le classpath, séparés par :.

Pour résumer, le classpath permet juste de spécifier au compilateur/à la JVM où aller chercher tous les .class utilisés (ie la racine des packages java utilisés).

Je ne sais pas si ça a éclairci un peu tes idées, mais voici comment fonctionne le classpath :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte