【问题标题】:-sourcepath vs -classpath-sourcepath 与 -classpath
【发布时间】:2013-02-26 10:52:53
【问题描述】:

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

假设有一个名为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 文件夹?

【问题讨论】:

    标签: java classpath javac


    【解决方案1】:

    这取决于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

    这两个环节的重点是:

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

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 2011-06-29
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多