【问题标题】:JAR with multiple main() -- how to start second application from first?具有多个 main() 的 JAR - 如何从第一个开始第二个应用程序?
【发布时间】:2013-06-19 10:31:44
【问题描述】:

我已将共享大量代码的两个单独的 JAR 合并到一个 JAR 中。到目前为止没问题,因为您可以在一个 JAR 中拥有多个 static void main()

直接调用主应用:

java -jar myjar.jar arg1 arg2

另一个应用程序需要显式调用它的替代main()

java -classpath myjar.jar alternative.main arg1

也不是什么大问题。

但是,现在我必须从 within 主应用程序中调用 alternative 应用程序。

我可以这样做:

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

但这让我觉得缺乏技巧。是否有一些更优雅/更有效的方式来开始第二个替代main()

【问题讨论】:

  • 如果它无论如何都在一个罐子里,你不能简单地调用另一个main方法吗?还是您需要单独的操作系统进程/JVM?
  • 1) 如果回退到使用 Process。阅读(并实施)所有When Runtime.exec() won't 的建议。那可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还要将String arg 分解为String[] args 以说明本身包含空格的参数。 2)这真的闻起来很糟糕,除非第一个应用程序。是一个'应用程序。套件启动工具栏”。
  • @AndrewThompson:糟糕的设计,一开始就应该是一个应用程序。不幸的是,有时你不得不忍受低于标准的设计,因为全面的重构不符合预算......

标签: java process runtime.exec


【解决方案1】:

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

String[] args = { "arg1" };
alternative.main.main(args);

如果调用不应该是同步的,但可以是同一 JVM 中的不同线程,那么您可以创建一个新线程来调用替代 main 方法。

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

【讨论】:

    【解决方案2】:

    你试过了吗

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

    【讨论】:

    • 我有,但它失败了,但结果却是完全不相关的原因。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多