java编译器选项,即javac -d

时间:2011-05-07 12:29:44

标签: java javac

我正在编译一个包含语句的程序。 e.g。

package APPC_LU62.Runtime ;

我还有一个与package语句匹配的预先存在的目录结构。

C:\APPC_LU62\Runtime

如何让javac编译器在预先存在的目录结构中保持相同的目录结构?即。

C:\APPC_LU62\Runtime\APPC_LU62\Runtime   

在我看来,编译器应该“足够智能”,以便在创建现有目录结构之前首先检查它。

由于

2 个答案:

答案 0 :(得分:7)

通常,编译器需要源文件并根据包结构输出类文件。

如果您未提供任何-sourcepath(或-classpath,如果没有给出源路径)选项,则会相对于当前目录搜索源文件。如果给出了源路径,则相对于此路径搜索源文件(除了在命令行上直接指定的任何文件)。

同样,如果未指定任何-d选项,则类文件将根据包结构放入目录中,相对于当前目录。如果您提供-d选项,则类文件将相对于选项指定的目录放置。将在此处创建不存在的目录。

因此,如果要在与源文件相同的目录树中创建输出,通常的方法是更改​​为此树的根(在您的情况下为C:\),并且从那里打电话给javac:

javac -classpath ... -sourcepath . APPC_LU62\Runtime\*.java

(或仅列出您实际想要编译的java文件)。或者,您可以添加-d C:\-sourcepath C:\选项,然后从您想要的任何地方调用命令:

javac -classpath ... -sourcepath C:\ -d C:\  C:\APPC_LU62\Runtime\*.java

稍后使用java命令执行类时,同样有效:这也要求根据包结构在目录中的类,其中root是类路径中提到的目录或jar文件。因此,您必须为C:\电话-classpath添加java

(顺便说一句,我不会使用某个驱动器的根作为包层次结构的根目录 - 更好地将一个目录下移一切。)

答案 1 :(得分:2)

如果您实际发布了javac命令并明确说明了您的来源所在位置会更好,但无论如何都会发生:当您发出javac -d somedir blahblah.java时,javac会创建适当的目录结构(匹配包名称层次结构)目录somedir开始。

所以在你的情况下,你只需要这样做:

javac -d c:\ your_files.java