如何在Java可执行文件.jar中启动多个主程序?
我正在编写一个包含多个包的程序。 每个包都有自己的主程序,我希望在解释器执行.jar时同时启动它们。 这似乎是一个相当简单的问题,但当我环顾四周时,似乎人们正在使用ant(我之前从未使用过)和其他方法。 在Eclipse中是否有一种更简单的方法来编译具有多个启动配置的.jar,更好的是,有没有办法对其进行硬编码?
如果推出这个的最好方法是通过ant。 如果我想要发布,我会写什么样的ant脚本…说com.myapp.package1.main,com.myapp.package2.main和com.myapp.package3.main包中的主要程序。 提前致谢!
jar清单允许您可选地指定不超过一个主类。 使用-jar
标志执行java
时会调用此方法。
java -jar myapp.jar
您可以在一个jar中包含多个主类,但必须使用-classpath
标志和指定的主类的完全限定名称来调用每个主类(除了上面的可选1)。
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,每个VM都在自己的进程中。 显然,这不符合您对“可执行jar”的要求。
或者,您可能希望有一个主要方法来启动单独的线程,因此只有一个进程,但并发执行。
Ant不是帮助您解决此问题的合适选择。 我怀疑你可能想要一个产生多个线程的主要方法。 随时提供有关您的要求的更多信息。
您可以创建一个主“main”类来执行其余的操作。
可能我会坚持使用MANIFEST解决方案,但还有另一种可能性:
Process p = Runtime.getRuntime().exec("java -jar another.jar");
但是在这里你应该小心路径并且应该正确结束进程,否则你的机器可以达到文件描述符的限制。
- 期望在模型属性@RequestBody或@RequestPart参数之后立即声明Errors / BindingResult参数
- 如何在Servlet中检查标头后删除请求的主体
- 为什么Joda对象是不可变的?
- Integer.parse(String str)java.lang.NumberFormatException:错误
- 为什么SomeClass 不等同于Javagenerics类型中的SomeClass ?
- 对doFinal的一些调用有badPaddingException。 不是全部。 相同的输入
- Java Logger未在Netbeans中记录输出
- Java获取referer URI?
- 在play framework 2.0中将文件上传为流