![](/img/trans.png)
[英]IntelliJ IDEA: how to make the java bytecode files (.class) compiled from the source files (.java) be in the same directory as the source files?
[英]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.