2010-03-14 2 views
31

J'ai lu la documentation de Sun et beaucoup de messages sur Stack Overflow, mais je suis encore confus au sujet des différences entre les options du compilateur Java -cp et -sourcepath.Différences entre les options classpath et sourcepath de javac

Disons que j'ai cette structure de répertoire:

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 paquet com.mypackage, et que la structure du répertoire est ok dans le dossier source.

Je suis dans le project1 et exécutez:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java 

ou

javac -d bin -classpath src src/com/mypackage/MainClass.java 

et j'obtenir le même résultat. En mode détaillé, le chemin de recherche des fichiers source est src dans les deux cas.

Ce serait génial si quelqu'un pouvait m'aider à comprendre les détails de ces options.

Répondre

21
-classpath classpath 

Définissez le chemin de la classe d'utilisateurs, en remplaçant le chemin de la classe d'utilisateurs dans la variable d'environnement CLASSPATH. Si ni CLASSPATH ni -classpath n'est spécifié, le chemin de classe d'utilisateur est constitué du répertoire en cours.

Si l'option -sourcepath n'est pas spécifiée, le chemin de la classe d'utilisateurs est recherché dans les fichiers source ainsi que dans les fichiers de classe.

-sourcepath sourcepath 

Spécifiez le chemin de code source pour rechercher des définitions de classe ou d'interface. Comme pour le chemin de la classe d'utilisateurs, 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 d'accès 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 soumises à une recompilation automatique si leurs sources sont trouvées.

+2

Merci pour votre réponse. La dernière phrase est ce que je cherchais: recompilation automatique des fichiers source trouvés dans le cp. J'ai vérifié la date de modification des fichiers .class dans le répertoire bin et il suit ce principe! Voici la grande différence entre les 2 options. Le temps de compilation donne aussi cet indice. Je vous remercie! – Alex

7
  • sourcepath est où est la racine de votre code pour compiler
  • classpath peut contenir votre code, mais aussi les bibliothèques dont vous avez besoin
+0

Nous vous remercions de votre réponse. – Alex

4

CLASSPATH indique au compilateur et le chargeur de classe où chercher la fichiers .class dont il a besoin.

Sourcepath est quelque chose que je n'utilise pas beaucoup. Je crois que c'est facultatif, parce que généralement le répertoire courant est le sourcepath. CLASSPATH ne l'est pas.

1
  • classpath est recherché pour les fichiers de classe (.class) fichiers
  • sourcepath est recherché (source .java) (.a.k.une classe ou d'une interface définitions)

Cependant, si sourcepath est pas spécifié, le classpath est recherché pour les deux 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 tout à fait sourcepath.

Les personnes qui doivent utiliser à la fois classpath et sourcepath ciblent probablement des contenus de répertoire étranges. Par exemple, ils peuvent avoir un dossier qui contient des fichiers source et des fichiers de classe, mais ne souhaite que rechercher les fichiers sources.

Questions connexes