3

javac -sourcepath 选项的意义何在?

假设你有一个文件 Ball.java,和文件 Eight.java,运行起来似乎没有区别:

javac Eight.java lib/pool/Ball.java

javac Eight.java -sourcepath lib

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

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

通过进一步的测试,我已经确认 -sourcepath 甚至没有像类路径那样考虑源的最后修改日期,因此甚至无法在构建过程中节省时间。与使用 -classpath 时一样,如果 .class 文件不存在而源文件存在,或者 .java 文件比 .class 文件新,这将构建 .class 文件,而不管源路径上的任何源文件都将再次构建他们是多么新。当同时指定 -sourcepath 和 -classpath 时,只有在源文件较新时才会重建类路径,因此指定源路径和类路径似乎完全没有意义。我还进行了测试,以确保 -sourcepath 和 -classpath 都只构建解析所需的必要源文件。

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

4

2 回答 2

1

源路径用于查找您要求编译的文件(在您的示例中为 8.java)中引用的类的 .java 文件,这些文件不存在 .class 文件。编译器也会自动编译这些。我不确定它是否比较了 .java 和相应的 .class 文件的修改时间,如果 .java 较新,则重新编译它,但我认为可以。

于 2013-04-24T11:48:22.160 回答
0

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

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

于 2013-05-03T14:36:43.097 回答