我正在编译一个包含语句的程序。 e.g。
package APPC_LU62.Runtime ;
我还有一个与package语句匹配的预先存在的目录结构。
C:\APPC_LU62\Runtime
如何让javac编译器在预先存在的目录结构中保持相同的目录结构?即。
C:\APPC_LU62\Runtime\APPC_LU62\Runtime
在我看来,编译器应该“足够智能”,以便在创建现有目录结构之前首先检查它。
由于
答案 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