为了oracle认证而学习我正在尝试所有可能在考试中出现的场景。 比如这里对shell命令行(unix based)有一点疑问:
假设有一个名为 myProject
的文件夹和一个名为 myProject/source 的子文件夹。
文件 SubFile.java
位于文件夹 myProject/source
中,另一个文件 File.java
位于 myProject
中> 文件夹。
通过键入以下命令,我得到不同的行为:
cd source
(因此,目前我在“myProject/source”)
javac -sourcepath ../File.java
//命令 ../无法访问“文件夹”
然后在从 myProject
文件夹编译 File.java
并返回到子文件夹后,如果我尝试:
javac -classpath ../SubFile.java
//使用标志 -classpath
它似乎接受 ../
语法来访问 super
文件夹。
你知道为什么会这样吗?此外,是否有机会使用 -sourcepath
标志访问 super
文件夹?
最佳答案
这取决于 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
(意思是,编译器不会自动编译源路径<上的所有文件
)。
当使用 -classpath
编译时,也会在类路径中搜索源文件,除非您明确指定一个单独的源路径 - 在以下情况下,编译器将抛出错误(假设您之前已经清理了 File.class 文件):
javac -classpath .. -sourcepath \temp SubFile.java
另见 javac - Java programming language compiler和 Differences between classpath and sourcepath options of javac获取更多信息。
这两个链接的重点是:
Note: Classes found through the class path may be subject to automatic recompilation if their sources are also found.
关于java - -sourcepath 与 -classpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15087224/