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

Ale*_*lex 35 java command-line javac

我阅读了Sun文档和Stack Overflow上的很多帖子,但我仍然对Java编译器选项-cp和Java之间的差异感到困惑-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)  
Run Code Online (Sandbox Code Playgroud)

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

我在project1目录中并运行:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java  
Run Code Online (Sandbox Code Playgroud)

要么

javac -d bin -classpath src src/com/mypackage/MainClass.java  
Run Code Online (Sandbox Code Playgroud)

我得到了同样的结果.在详细模式下,源文件的搜索路径src在两种情况下都是如此.

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

sta*_*ker 25

 -classpath classpath
Run Code Online (Sandbox Code Playgroud)

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

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

-sourcepath sourcepath
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢您的回答.最后一句是我要找的:自动重新编译cp中找到的源文件.我验证了bin目录中.class文件的修改日期,它遵循这个原则!这是两个选项之间的巨大差异.编译时间也给出了这个线索.谢谢! (2认同)

Kar*_*och 10

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


duf*_*ymo 5

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

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


Nik*_*lic 5

  • 在类路径中搜索类 (.class) 文件
  • sourcepath 搜索源 (.java) 文件(.aka 类或接口定义

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

这让我相信我们几乎总是可以通过仅使用类路径并完全避免使用源路径来使事情变得简单。

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