java.class文件目录结构是否与源文件相同?
目前,我使用以下步骤从src文件到jar执行一些runitime编译: 第一:在目录和子目录中生成源文件java.class文件目录结构是否与源文件相同?,java,jar,build,.class-file,Java,Jar,Build,.class File,目前,我使用以下步骤从src文件到jar执行一些runitime编译: 第一:在目录和子目录中生成源文件 /main /submain1 /submain2 第二:编译代码(目前所有的.class文件都进入这个目录) 第三:将jar从.class文件生成到目标文件夹中 /target 编译由Java工具提供者Java编译器完成 ArrayList<File> files1 = getSourceFiles(); Iterable<? extends J
/main
/submain1
/submain2
第二:编译代码(目前所有的.class文件都进入这个目录)
第三:将jar从.class文件生成到目标文件夹中
/target
编译由Java工具提供者Java编译器完成
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();
ArrayList files1=getSourceFiles();
IterableJava希望foo.bar.MyClass
位于foo/bar/MyClass.class
(还有一些与类路径相关的附加要求),否则您将在wazoo上获得ClassNotFoundExceptions
(或者是NoClassDefFoundErrors
)
因此,不仅应该有相同的结构,而且必须有相同的结构。我不知道您为什么要这样编译,而不是使用现有的生成工具,默认情况下,该工具将生成正确的结果
创建一个jar文件相当于创建一个zip文件,所以正如成功的编译并不意味着程序可以工作一样,拥有一个jar文件也不意味着它可以工作
现在我的第一个问题是,将所有.class文件分离到不同的编译单元中,并重建与源文件相同的目录结构是否更好
.class文件的输出结构必须镜像源文件中使用的包名。源文件的AFAIK文件夹结构并没有那个么重要
如果在.jar文件中使用任何其他结构,则类装入器无法找到类
所以你的问题的答案是否定的。我很惊讶你竟然没有同样的结构就让它工作了(如果你让它工作的话)。你吓坏了我。。。然而,jar创建成功。但测试并不困难,因为一些必需的组件还没有实现。在运行时编译java代码是必要的。因此,我们选择以编程方式使用jdk提供的JavaCompiler。如果你有其他(更好的)建议,我对任何建议都持开放态度。啊,我不知道你是在运行时这样做的。也可以在java上下文之外执行命令行或外部工具进行编译,但我更愿意留在java上下文中,如果您使用自定义类加载器,您可以对类文件执行任何操作。@sby除了…任何操作之外,您还指什么?
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();