sourcepath和仅指定源文件之间的区别?

时间:2013-04-24 08:22:25

标签: java

javac -sourcepath选项有什么意义?

假设你有一个文件Ball.java,并且文件为Eight.java,运行之间似乎没有区别:

javac Eight.java lib/pool/Ball.java

javac Eight.java -sourcepath lib

类路径对我来说很有意义,因为它意味着您只需要将类文件分发给不需要弄乱源代码的开发人员,但我认为如果它是您的,那么您可能只需要/需要源代码拥有/一个内部项目所以无法理解为什么需要它。

人们是否拥有大型源代码库而不是类?

从进一步的测试中我已经确认-sourcepath甚至没有像源路径一样考虑源的最后修改日期,因此甚至无法在构建期间节省时间。当使用-classpath时,这将构建.class文件,如果它不存在而源是,或者.java文件比.class文件更新,而源路径上的任何源文件将再次构建,无论如何它们有多新。并且当指定了-sourcepath和-classpath时,它会使类路径的操作仅在源文件较新时才重建,因此指定sourcepath和classpath似乎完全没有意义。 我还测试过以确保-sourcepath和-classpath都只构建解析所需的必要源文件。 -sourcepath指定我可以找到的特定.java文件的唯一好处是sourcepath只需要指定一个目录,并自动提取任何jar或zip文件。

由于懒惰(不想提取和指定所有源文件),-sourcepath也是如此? 在-classpath上使用-sourcepath有什么好处吗?因为它们看起来做同样的事情,但是当路径不需要重建时,类路径通过节省时间来更好地执行它。

2 个答案:

答案 0 :(得分:1)

sourcepath用于定位.java文件,用于在您要编译的文件中引用的类(在您的示例中为Eight.java),其中不存在.class文件。编译器也会自动编译它们。我不确定它是否比较.java和相应的.class文件的修改时间,并重新编译.java,如果它更新,但我认为它。

答案 1 :(得分:0)

我从开发中的其他同事那里发现,如果他们想要构建项目或子项目的一部分,他们通常会在开发期间使用它。他们不是从头开始构建所有东西(可能需要数小时),而只是想构建一些项目,然后他们可以在-sourcepath中指定整个项目的其他目录,这样就可以解析类。这意味着它可以自动查找所需的依赖项,并在需要时构建它们。

我也被告知,这在maven构建期间可能会有所帮助,因为依赖性收集的顺序可能非常无组织。由于在构建时jar不存在而不是缺少依赖项,因此可以将整个代码树指定为源路径。虽然我认为这不是最好的建议,但是当有人遇到问题时,它会很有帮助。