如何在 Java 可执行文件 .jar 中启动多个主程序?

Posted

技术标签:

【中文标题】如何在 Java 可执行文件 .jar 中启动多个主程序?【英文标题】:How do I start multiple main programs in a Java executable .jar? 【发布时间】:2011-08-22 21:46:00 【问题描述】:

我正在编写一个包含多个包的程序。每个包都有自己的主程序,我希望在解释器执行 .jar 时同时启动所有主程序。这似乎是一个相当简单的问题,但是当我环顾四周时,似乎人们正在使用蚂蚁(我以前从未使用过)和其他方法。在 Eclipse 中是否有更简单的方法来编译具有多个启动配置的 .jar,更好的是,有没有办法对其进行硬编码?

如果启动它的最佳方式是通过蚂蚁。如果我想启动,我会写什么样的 ant 脚本……比如包 com.myapp.package1.main、com.myapp.package2.main 和 com.myapp.package3.main 中的主要程序。提前致谢!

【问题讨论】:

【参考方案1】:

jar 清单允许您选择指定不超过一个主类。当您使用 -jar 标志执行 java 时,会调用它。

java -jar myapp.jar

您可以在单个 jar 中包含多个主类,但每个(除了上面的可选 1)都必须使用 -classpath 标志并指定主类的完全限定名称来调用。

java -classpath myapp.jar com.mypackage.app.Main01 && \
  java -classpath myapp.jar com.mypackage.app.Main02 && \
  java -classpath myapp.jar com.mypackage.app.Main03

上面的示例将生成三个独立的 java VM,每个都在自己的进程中。显然,这不符合您对“可执行 jar”的要求。

或者,您可能希望有一个启动单独线程的 main 方法,以便只有一个进程,但同时执行。

Ant 不是帮助您解决此问题的合适选择。我怀疑您可能想要一个生成多个线程的主方法。请随时提供有关您的要求的更多信息。

【讨论】:

【参考方案2】:

您可以创建一个主要的“主”类来执行其余部分。

【讨论】:

嗯,首先,我希望这些包几乎独立运行,所以我不希望主程序执行其他主程序。 好吧,它们仍然是独立的,这只会启动您拥有的程序。如果您可以提供有关您正在尝试做的事情的更多信息,我或其他人可能会为您的案例提出更合适的解决方案 不,Java 启动器总是以一个线程和一个类的 main 方法启动。如果你需要更多,你必须自己做。【参考方案3】:

我可能会坚持使用 MANIFEST 解决方案,但还有另一种可能:

Process p = Runtime.getRuntime().exec("java -jar another.jar");

但是在这里你应该小心路径并正确结束进程,否则你的机器可能会达到文件描述符的限制。

【讨论】:

以上是关于如何在 Java 可执行文件 .jar 中启动多个主程序?的主要内容,如果未能解决你的问题,请参考以下文章

java 多个类文件如何打包成jar

java 怎么把多个jar打包成一个jar来使用??

无法运行java,没有那个文件或目录启动javajar包

如何将多个Java源文件打包成jar包

如何将java源代码打包生成jar?

如何在linux下执行jar文件?