我刚刚创建了一个简单的java应用程序,它将为我们的数据库生成实体类。这些java类我将保存到我的本地磁盘。到目前为止,一切运行正常。
现在,我想从我的主应用程序中的那些java类生成一个JAR文件。我知道,我可以操作jar文件,我还读到了在运行时向jar文件添加类的内容。
但是在我的例子中,我的构建路径中没有这些类。我需要的是从我刚刚创建的java文件创建类文件,并将它们放入我的jar文件中。
在我的java应用程序中这是可能的吗?
我这样做的原因是,我们的数据库将一直由许多人扩展,我不想手动将这些字段添加到我的实体中。因此,我想创建一个应用程序,它从我们的数据库中扫描systables,并从这些信息中生成java实体文件。但是现在,我需要在生成这些java文件之后在类文件中编译它们,并将它们添加到我的最终jar文件中。
感谢您对此问题的任何帮助和/或信息。
致以问候,豪克
发布于 2011-12-15 23:53:52
请参阅java.util.jar.JarOutputStream
类(以及web上的许多用法示例)。例如:
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
块中的流。
另外,请记住,manifest file只是"META-INF/MANIFEST.MF
“中的条目,它只是一个文本文件,其中包含每个manifest file specification的格式化规则。
动态地将Java源文件编译成类文件是一项独立的任务,它本身充满了复杂性,但javax.tools.JavaCompiler
类是一个很好的起点。这个问题也是一个很好的介绍:How do I programmatically compile and instantiate a Java class?
https://stackoverflow.com/questions/8522443
复制相似问题