java - -sourcepath 与 -classpath

标签 java classpath javac

为了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 compilerDifferences 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/

相关文章:

java - 在 Java 中更新/重新分配一个值

java - 可执行 JAR 忽略它自己的 Class-Path 属性

java - 如何在外部文件夹中为 tomcat 中的 Web 应用程序配置 log4j.properties

java - 当背后的代码存在时,简单的异步任务按钮不输出 boolean 值

Java GDB 输入不是来自终端

java - JFrame 最小化为扩展坞名称 "java"

eclipse - Eclipse 插件中的 Clojure 类路径问题

java - 为 Open MPI 构建 Java 接口(interface)

java - JOGL 程序无法编译 - 带有类路径的 javac

java - 反编译修复代码后重新编译成*.Jar?