-sourcepath vs -classpath

时间:2013-02-26 10:52:53

标签: java classpath javac

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

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

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

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

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

javac -sourcepath ../ File.java
 //命令../无法访问“文件夹” 然后从File.java文件夹中编译myProject并在尝试时返回子文件夹:

javac -classpath ../ SubFile.java

//使用标记-classpath,它似乎接受../语法来访问super文件夹。

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

1 个答案:

答案 0 :(得分:3)

这取决于SubFile是否也引用File

请考虑以下代码:

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

假设此文件位于源文件夹中,并假设您位于源文件夹中,则

javac -sourcepath ../ SubFile.java

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

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

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

有关详细信息,另请参阅javac - Java programming language compilerDifferences between classpath and sourcepath options of javac

这两个链接的重点是:

  

注意:如果找到了源代码,则可以通过类路径找到的类进行自动重新编译。