【发布时间】:2014-05-12 08:53:35
【问题描述】:
我试图了解 javac 的 -classpath 和 -sourcepath 选项之间关于自动重新编译源代码文件的区别。我阅读了 subject of javac 上的 Java 文档,并针对它的 -sourcepath 选项声明了 -
Note: Classes found through the class path may be subject to automatic recompilation if their sources are also found
我还查看了 this webpage (idevelopment.info),以了解有关 javac 的 -classpath 和 -sourcepath 选项的更多信息。在他们的示例中,它描述了一个测试项目,其中包含两个名为 TestFoo.java(超类)和 TestBaz.java(依赖子类)的 java 文件。它给出了如何编译这个测试项目的三个选项,其中两个总结如下。
选项 #2
-
在编译 TestBaz 时将 TestFoo 添加到源路径:
javac -d baz/classes -sourcepath foo/src baz/src/TestBaz.java
选项#3
- 将依赖项放在源路径和类路径中。然后,如果类路径中的 .class 文件过期,源路径中的 .java 文件将被重新编译。
很遗憾,我无法发现这两个选项之间的区别。例如,在选项 #2(不使用 -classpath)中,如果我编辑 TestFoo.java 或 TestBaz.java,那么我将获得更新的 TestFoo.class 或 TestBaz.class 文件。换句话说,如果任何一个 .class 文件过期,那么源代码将被重新编译。在上面的选项#3(确实使用-classpath)中,同样的事情也会发生。因此,我看不出选项 #2 和 #3 之间的区别。
谁能概述一个简单的示例测试项目的结构,我可以看到两个稍微不同的 javac 命令与它一起使用?一个 javac 示例命令应该使用-classpath,而另一个不应该。当使用包含-classpath 的javac 示例时,如果找到已编辑的超类源文件,则会发生自动重新编译。当使用排除-classpath 的javac 示例时,如果超类源文件已被编辑,则不会发生自动重新编译。非常感谢。
【问题讨论】: