-sourcepath vs -classpath

Rol*_*all 5 java javac classpath

学习oracle认证我正在尝试考试期间可能出现的所有可能情况.例如,这里有一点关于shell命令行(基于unix)的疑问:

我们假设有一个名为的文件夹myProject和一个名为的子文件夹myProject/source.

文件SubFile.java位于文件夹中myProject/source,另一个文件File.java位于myProject文件夹中.

通过键入以下命令,我会遇到不同的行为:

cd source (因此,目前我在"myProject/source")

javac -sourcepath ../ File.java
//命令../无法访问"文件夹",然后File.javamyProject文件夹编译后返回子文件夹,如果我尝试:

javac -classpath ../ SubFile.java

//带有标志-classpath它似乎接受../访问该super文件夹的语法.

你知道它为什么会这样吗?而且有没有机会访问super带有-sourcepath标志的文件夹?

And*_*ter 4

这要看是否SubFile也有参考文献File

考虑以下代码:

public class SubFile {
    private static File file = new File();
}
Run Code Online (Sandbox Code Playgroud)

假设这个文件位于你的源文件夹中,并且假设你在源文件夹中,那么

javac -sourcepath ../ SubFile.java
Run Code Online (Sandbox Code Playgroud)

将编译SubFile.javaSubFile.class源文件夹内,并将编译File.javaFile.class父文件夹中。如果这些文件之间没有依赖关系,那么编译器将不会编译File.java(意味着编译器不会自动编译 上的所有文件sourcepath)。

当使用 进行编译时-classpath,也会在类路径中搜索源文件,除非 您显式指定单独的源路径 - 在以下情况下,编译器将抛出错误(假设您之前已经清理了 File.class 文件):

javac -classpath .. -sourcepath \temp SubFile.java
Run Code Online (Sandbox Code Playgroud)

另请参阅javac - Java 编程语言编译器javac 的类路径和源路径选项之间的差异以获取更多信息。

这两个链接的要点是:

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