在运行时生成JAR文件

8
我刚刚创建了一个简单的Java应用程序,用于生成我们数据库中的实体类。 我会将这些Java类保存到我的本地磁盘中。 到目前为止,一切正常。
现在我想在我的主应用程序中从这些Java类中生成一个JAR文件。 我知道可以操作jar文件,并且我也阅读过有关在运行时向jar文件添加类的内容。
但在我的情况下,我没有在构建路径中拥有这些类。 我需要从刚创建的Java文件中创建类文件,并将它们放入我的jar文件中。
这是否可能在我的Java应用程序内完成?
我这样做的原因是我们的数据库将不断被许多人扩展,我不想手动将这些字段添加到我的实体中。 因此,我想创建一个应用程序来扫描我们数据库中的系统表,并从那些信息中生成Java实体文件。 但是现在我需要在生成它们后将这些Java文件编译成类文件并将它们添加到我的最终JAR文件中。
感谢您对此问题所提供的任何帮助和/或信息。
问候,
豪克

尝试在网上搜索“如何以编程方式创建JAR文件”,您会发现很多例子都使用 java.util.jar.JarOutputStreamjava.util.zip.ZipOutputStream - maerics
1个回答

13

请参见 java.util.jar.JarOutputStream 类(以及许多网上使用示例)。例如:

FileOutputStream fout = new FileOutputStream("c:/tmp/foo.jar");
JarOutputStream jarOut = new JarOutputStream(fout);
jarOut.putNextEntry(new ZipEntry("com/foo/")); // Folders must end with "/".
jarOut.putNextEntry(new ZipEntry("com/foo/Foo.class"));
jarOut.write(getBytes("com/foo/Foo.class"));
jarOut.closeEntry();
jarOut.putNextEntry(new ZipEntry("com/foo/Bar.class"));
jarOut.write(getBytes("com/foo/Bar.class"));
jarOut.closeEntry();
jarOut.close();
fout.close();
当然,你的程序很可能会检查文件系统并遍历目录和文件结构以生成条目名称和内容,但此示例显示了关键功能。不要忘记正确处理异常并在finally块中关闭流。
此外,请记住,清单文件只是 "META-INF/MANIFEST.MF" 中的条目,它只是一个带有格式规则的文本文件,符合清单文件规范
在运行时将Java源文件编译为类文件是单独的任务,充满了自己的复杂性,但类javax.tools.JavaCompiler是一个很好的起点。该问题也是一个很好的介绍:如何以编程方式编译和实例化Java类?

你怎么将源代码添加到生成的 jar 文件中? - Gobliins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接