J'ai lu la documentation de Sun et de nombreux articles sur Stack Overflow, mais je suis toujours confus quant aux différences entre les options du compilateur Java -cp
et -sourcepath
.
Disons que j'ai cette structure de répertoires:
c:\Java\project1\src (where the Java source files are)
c:\Java\project1\bin (where the Java class files will be or already are)
Disons aussi que j'ai un fichier source MainClass.Java
dans un package com.mypackage
, et que la structure du répertoire est correcte dans le dossier source.
Je suis dans le répertoire project1 et je lance:
javac -d bin -sourcepath src src/com/mypackage/MainClass.Java
ou
javac -d bin -classpath src src/com/mypackage/MainClass.Java
et j'obtiens le même résultat. En mode verbeux, le chemin de recherche des fichiers source est src
dans les deux cas.
Ce serait formidable si quelqu'un pouvait m'aider à comprendre les détails de ces options.
-classpath classpath
Définissez le chemin d'accès à la classe d'utilisateurs, en remplaçant le chemin d'accès aux classes d'utilisateurs dans la variable d'environnement CLASSPATH. Si ni CLASSPATH ni -classpath n'est spécifié, le chemin de la classe utilisateur est constitué du répertoire en cours.
Si l'option -sourcepath n'est pas spécifiée, le chemin de la classe utilisateur est recherché pour les fichiers source ainsi que les fichiers de classe.
-sourcepath sourcepath
Spécifiez le chemin du code source pour rechercher des définitions de classe ou d'interface. Comme pour le chemin de classe utilisateur, les entrées du chemin source sont séparées par des points-virgules (;) et peuvent être des répertoires, des archives JAR ou des archives Zip. Si des packages sont utilisés, le nom du chemin local dans le répertoire ou l'archive doit refléter le nom du package.
Notez que les classes trouvées via le chemin de classe sont sujettes à une recompilation automatique si leurs sources sont trouvées.
CLASSPATH indique au compilateur et au chargeur de classe où chercher les fichiers .class dont il a besoin.
Sourcepath est quelque chose que je n'utilise pas tellement. Je pense que c'est facultatif, car généralement le répertoire courant est le chemin source. CLASSPATH ne l'est pas.
Cependant, si le chemin source n'est PAS spécifié, le chemin de classe est recherché à la fois pour les fichiers de classe ET les fichiers source.
Cela m'amène à croire que nous pouvons presque toujours garder les choses simples en utilisant simplement classpath et en évitant complètement le chemin source.
Les personnes qui doivent utiliser à la fois le chemin de classe et le chemin source ciblent probablement un contenu de répertoire étrange. Par exemple, ils peuvent avoir un dossier contenant des fichiers source et des fichiers de classe, mais souhaitent uniquement rechercher les fichiers source.