2011-05-07 235 views
1

我编译的程序有一个package语句。 例如java编译器选项,即javac -d

package APPC_LU62.Runtime ; 

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

C:\APPC_LU62\Runtime 

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

C:\APPC_LU62\Runtime\APPC_LU62\Runtime 

在我看来,编译器应该是足够“智能”首先要检查现有的目录结构创建一个之前。

感谢

回答

5

一般来说,编译器期望的源文件,并根据包结构输出类文件。

如果您没有提供任何-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命令执行类:这还预计,根据目录中的类到包结构,其中根是类路径中提到的目录或jar文件。因此,您必须将C:\添加到-classpath,以便为您的java呼叫。 (顺便说一下,我不会使用某个驱动器的根作为程序包层次结构的根目录 - 更好地将所有目录下移一个目录。)

2

会更好,如果你实际上已经张贴您的javac命令,并明确提出您的来源所在,但在这里不用反正:当你发出javac -d somedir blahblah.javajavac将创建相应的目录结构(选配包名称等级)起始于目录somedir

所以你的情况,你只需要做:

javac -d c:\ your_files.java 
+0

嗨,马特,谢谢你接受答案的“单挑”......我从来不知道这个复选标记是什么......我不是很善于理解符号......我工作得更好用词。但这里是我的选择文件的内容,我传递给Java编译器: -g -verbose -deprecation -implicit:类 -classpath C:\ JVM \ ibm_sdk60 \; C:\ JVM \ CS_SNA_API_Client \; C: \ JVM \ CS_SNA_API_Client \ CPICJAVA.JAR; C:\ JVM \ CS_SNA_API_Client \ CPICJAVA.DLL -sourcepath C:\ APPC_LU62 \ Runsrc – 2011-05-07 13:04:11

+0

我想知道是否有办法阻止编译器创建一个新的目录结构每次运行编译器。如何“告诉”编译器使用我现有的目录结构。谢谢 – 2011-05-07 13:06:21

+0

@Guy:另一个提示:添加这样的评论问题,那里有一个编辑链接。 – 2011-05-08 01:43:12