5

学习甲骨文认证我正在尝试考试期间可能发生的所有可能情况。例如,这里对shell命令行(基于unix)有一点疑问:

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

文件SubFile.java在文件夹中myProject/source,另一个文件File.javamyProject文件夹中。

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

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

javac -sourcepath ../ File.java
File.java// 如果我尝试从myProject文件夹编译并返回子文件夹 后,命令 ../ 无法访问“文件夹” :

javac -classpath ../ SubFile.java

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

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

4

1 回答 1

4

这取决于是否SubFile还引用File.

考虑以下代码:

public class SubFile {
    private static File file = new File();
}

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

javac -sourcepath ../ SubFile.java

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

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

javac -classpath .. -sourcepath \temp SubFile.java

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

这两个链接的重点是:

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

于 2013-02-26T11:07:28.363 回答