如何在 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 中启动多个主程序?的主要内容,如果未能解决你的问题,请参考以下文章