40

我阅读了 Sun 文档和很多关于 Stack Overflow 的帖子,但我仍然对 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在 package 中有一个源文件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

4 回答 4

28
 -classpath classpath

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

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

-sourcepath sourcepath

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

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

于 2010-03-14T10:00:14.983 回答
14
  • sourcepath 是要编译的代码的根目录
  • 类路径可以包含您的代码,也可以包含您需要的库
于 2010-03-14T09:57:50.680 回答
5

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

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

于 2010-03-14T09:58:37.140 回答
5
  • 在类路径中搜索类 (.class) 文件
  • sourcepath 搜索源 (.java) 文件(.aka 类或接口定义

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

这使我相信我们几乎总是可以通过只使用类路径并完全避免使用源路径来保持简单。

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

于 2016-01-21T21:13:21.420 回答