【问题标题】:Generate JAR file during RunTime在运行时生成 JAR 文件
【发布时间】:2011-12-15 15:26:18
【问题描述】:

我刚刚创建了一个简单的 java 应用程序,它将为我们的数据库生成实体类。这些 java 类我将保存到我的本地磁盘。 到目前为止一切正常。

现在我想从我的主应用程序中的这些 java 类生成一个 JAR 文件。我知道,我可以操作 jar 文件,并且我还阅读了有关在运行时将类添加到 jar 文件的信息。

但在我的情况下,我的构建路径中没有类。我需要的是从我刚刚创建的 java 文件中创建类文件并将它们放入我的 jar 文件中。

这可能在我的 java 应用程序中吗?

我这样做的原因是我们的数据库将一直被许多人扩展,我不想手动将这些字段添加到我的实体中。所以我想创建一个应用程序,从我们的数据库中扫描系统表并从这些信息中生成 java 实体文件。但是现在我需要在生成它们之后将这些java文件编译到类文件中并将它们添加到我的最终jar文件中。

感谢您提供有关此问题的任何帮助和/或信息。

许多问候, 豪克

【问题讨论】:

标签: java jar


【解决方案1】:

参见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 块中的流。

另外,请记住manifest file 只是“META-INF/MANIFEST.MF”中的条目,它只是一个文本文件,其格式规则符合manifest file specification

动态地将 Java 源文件编译成 Class 文件是一项单独的任务,充满了复杂性,但 javax.tools.JavaCompiler 类是一个很好的起点。这个问题也很好介绍:How do I programmatically compile and instantiate a Java class?

【讨论】:

  • 如何将源代码添加到生成的 jar 中?
猜你喜欢
  • 1970-01-01
  • 2019-02-14
  • 2012-04-06
  • 2013-12-31
  • 2016-11-24
  • 1970-01-01
  • 2017-06-15
  • 2012-05-26
  • 2013-03-05
相关资源
最近更新 更多