javac的classpath和sourcepath选项之间的差异

时间:2010-03-14 09:54:51

标签: java command-line javac

我在Stack Overflow上阅读了Sun文档和很多帖子,但我仍然对Java编译器选项-cp-sourcepath之间的差异感到困惑。

假设我有这样的目录结构:

c:\Java\project1\src (where the Java source files are)  
c:\Java\project1\bin (where the Java class files will be or already are)  

我们还要说我在包MainClass.java中有一个源文件com.mypackage,并且源文件夹中的目录结构正常。

我在 project1 目录中并运行:

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

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

我获得了相同的结果。在详细模式下,两种情况下源文件的搜索路径均为src

如果有人能帮我弄清楚这些选项的具体细节,那就太好了。

4 个答案:

答案 0 :(得分:24)

 -classpath classpath

设置用户类路径,覆盖CLASSPATH环境变量中的用户类路径。如果既未指定CLASSPATH或-classpath,则用户类路径由当前目录组成。

如果未指定-sourcepath选项,则会在用户类路径中搜索源文件和类文件。

-sourcepath sourcepath

指定搜索类或接口定义的源代码路径。与用户类路径一样,源路径条目由分号(;)分隔,可以是目录,JAR存档或ZIP存档。如果使用了包,则目录或存档中的本地路径名必须反映包名称。

请注意,如果找到了源,则通过类路径找到的类会自动重新编译。

答案 1 :(得分:9)

  • sourcepath是要编译的代码的根目录
  • classpath可以包含您的代码,但也包含您需要的库

答案 2 :(得分:4)

CLASSPATH告诉编译器和类加载器在哪里查找它需要的.class文件。

Sourcepath是我不太用的东西。我相信它是可选的,因为通常当前目录是源路径。 CLASSPATH不是。

答案 3 :(得分:2)

  • 在类路径中搜索类(.class)文件
  • 在sourcepath中搜索源(.java)文件(.a.k.a类或接口 definitions

但是,如果未指定sourcepath,则会在类路径中搜索类文件和源文件。

这让我相信我们几乎总能通过使用classpath和完全避免sourcepath来保持简单。

需要同时使用classpath和sourcepath的人可能会针对奇怪的目录内容。例如,他们可能有一个包含源文件和类文件的文件夹,但只想搜索源文件。