java.class文件目录结构与源文件相同吗?

时间:2015-10-21 06:33:36

标签: java jar build .class-file

目前我通过以下步骤从src文件到jar进行一些runitime编译:

首先:在目录和子目录中生成源文件

/main    
  /submain1
  /submain2 

第二:编译代码(当前所有.class文件都进入此目录)

 /builddir

第三步:将.class文件中的jar生成到目标文件夹

 /target

编译由Java ToolProviders Javacompiler

完成
ArrayList<File> files1 =  getSourceFiles();
Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(files1);
JavaCompiler.CompilationTask task = compiler.getTask(null ,fileManager , null, optionList, null, compilationUnits1 );
boolean compiled = task.call();

现在我的第一个问题是,将所有.class文件分成不同的编译单元并重建与源文件相同的目录结构会更好吗?

如果是这样,怎么办呢?

2 个答案:

答案 0 :(得分:1)

Java期望在foo.bar.MyClass找到foo/bar/MyClass.class(带有一些额外的类路径相关要求),否则你会得到ClassNotFoundExceptions(或者是NoClassDefFoundErrors)wazoo

因此,您不仅应具有相同的结构,而且必须具有相同的结构。我不知道为什么你这样编译而不是使用现有的构建工具,它会默认生成正确的结果。

创建一个jar文件相当于创建一个zip文件,所以正如一个成功的编译并不意味着你的程序有效,没有一个jar文件意味着它是一个工作的。

答案 1 :(得分:1)

  

现在我的第一个问题是,将所有.class文件分成不同的编译单元并重建与源文件相同的目录结构会更好吗?

.class文件的输出结构必须镜像源文件中使用的包名称。源文件的AFAIK文件夹结构并不重要。

如果在.jar文件中使用任何其他结构,则类加载器无法找到类。

所以问题的答案是