web-dev-qa-db-fra.com

Différences entre les options classpath et sourcepath de javac

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.

35
Alex
 -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.

25
stacker
  • le chemin source est où est la racine de votre code à compiler
  • classpath peut contenir votre code mais aussi les bibliothèques dont vous avez besoin
11
Kartoch

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.

5
duffymo
  • classpath est recherché pour les fichiers de classe (.class)
  • sourcepath est recherché pour les fichiers source (.Java) (classe ou interface .a.k.a définitions)

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.

3
Niko Bellic