Java JAR with multiple main()--如何从第一个应用程序启动第二个应用程序?

Java JAR with multiple main()--如何从第一个应用程序启动第二个应用程序?,java,process,runtime.exec,Java,Process,Runtime.exec,我将两个独立的JAR连接到一个JAR中,它们共享大量代码。到目前为止没有问题,因为一个JAR中可以有多个static void main() 直接调用主应用程序: java -jar myjar.jar arg1 arg2 另一个应用程序需要显式调用其可选的main(): 这也不是什么大问题 但是,现在我必须从主应用程序中调用替代应用程序 我可以这样做: Runtime.getRuntime().exec( "java -classpath myjar.jar alternative.main

我将两个独立的JAR连接到一个JAR中,它们共享大量代码。到目前为止没有问题,因为一个JAR中可以有多个
static void main()

直接调用主应用程序:

java -jar myjar.jar arg1 arg2
另一个应用程序需要显式调用其可选的
main()

这也不是什么大问题

但是,现在我必须从主应用程序中调用替代应用程序

我可以这样做:

Runtime.getRuntime().exec( "java -classpath myjar.jar alternative.main arg1" );

但我觉得这缺乏技巧。是否有更优雅/高效的方法来启动第二个可选的
main()

如果两个主应用程序可以在同一个JVM中运行,并且调用是同步的,那么这应该可以工作

String[] args = { "arg1" };
alternative.main.main(args);
如果调用不应该是同步的,但是可以是同一JVM中的不同线程,那么您可以创建一个新线程来调用alternative
main
方法

如果它必须是一个单独的进程/JVM,那么您所做的工作就足够好了。或者,您可以使用
java.lang.ProcessBuilder

您尝试过吗

alternative.main.main(new String[]{arg1});

如果它在一个jar中,你不能简单地调用另一个
main
方法吗?或者您是否需要单独的操作系统进程/JVM?1)如果退回到使用
进程
。阅读(并实施)的所有建议。这可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用的
exec
,并使用
ProcessBuilder
构建
流程。还可以将
字符串arg
分解为
字符串[]args
,以说明本身包含空格的参数。2) 这真的是一个糟糕的设计,除非第一个应用程序。是一个“应用程序”。套件启动工具栏。@AndrewThompson:设计很糟糕,它本来应该是一个单一的应用程序。不幸的是,有时你不得不忍受低于标准的设计,因为全面的重构不符合预算……我做了,但失败了,但结果是完全不相关的原因。;-)
alternative.main.main(new String[]{arg1});