繁体   English   中英

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

[英]java.class files directory structure same as source files?

目前,我通过以下步骤从src文件到jar执行一些运行时编译:

第一:在目录和子目录中生成源文件

/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文件分成不同的编译单元并重建与源文件相同的目录结构会更好吗?

如果是这样,怎么办?

Java希望在foo/bar/MyClass.class找到foo.bar.MyClass (还有一些与类路径有关的其他要求),否则您将在wazoo上得到ClassNotFoundExceptions (或者是NoClassDefFoundErrors )。

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

创建一个jar文件等同于创建一个zip文件,因此就像成功的编译并不意味着您的程序可以工作一样,拥有jar文件也不意味着它可以正常工作。

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

.class文件的输出结构必须镜像源文件中使用的程序包名称 源文件的AFAIK文件夹结构没有太大关系。

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

因此,您的问题的答案是否定的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM