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

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

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

【问题讨论】:

    标签: java main launch


    【解决方案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");
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-23
        • 2016-12-10
        • 2012-05-04
        • 2013-04-20
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        相关资源
        最近更新 更多