我有2个jar文件。我想让Jar A打开Jar B然后让jar A终止,让Jar B运行。我该怎么做呢?
编辑:我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的新实例中执行JarB,然后JarA使用system.exit(0)答案 0 :(得分:1)
是否要启动新的JVM实例以运行其他Jar,然后终止?这并不常见。
或者,您可以将Jar B包含在类路径中,并使用它在Jar A中的代码中提供的类。
答案 1 :(得分:1)
要启动新的JVM,您可以像启动其他操作系统命令一样启动外部java
进程,查看ProcessBuilder上的文档
ProcessBuilder pb = new ProcessBuilder("java", "-classpath", "B.jar", "B.BMain");
Process p = pb.start();
在Java中启动外部流程有很多警告,你会在SO搜索Process
和ProcessBuilder
jar
个文件无法运行或终止;这是jvm
,例如由命令java
启动。例如,当您运行以下命令时:
java -classpath A.jar A.Main
启动新的jvm
并执行类main
的{{1}}方法
现在方法A.Main
,可以调用Main.main()
中的类方法,如果它在类路径中。例如,如果命令是
B.jar
然后在java -classpath A.jar;B.jar pkg.A
中可以有
A.Main.main
B.SomeClass.SomeMethod()
位于B
当你说“打开B.jar”时,这就是你的意思吗?请注意,这并不会“关闭”另一个“A.jar”,无论这意味着什么。
答案 2 :(得分:0)
假设,即使在阅读了下面的答案之后,你仍然想在一个单独的JVM进程中调用“JAR-B”,而这个进程没有附加到父进程“JAR-A”,你最好的选择可能就是使用类似于“cmd / start”(对于Windows)或使用“sh ...&” (对于* nix)(来自JAR-A中的Java程序)
答案 3 :(得分:0)
我有一个可能的部分答案:
因此,如果您在Windows上使用Java,则可以使用
new ProcessBuilder("java", "-classpath", "B.jar", "B.Main").inheritIO().start();
这不仅将启动该过程,还将在同一命令提示符窗口中启动它。要退出JAR A,请在创建进程B之后立即在JAR A的主要方法中添加一个System.exit(0);
。
对于Linux构建,我不确定,因为我在程序中遇到了相同/相似的问题。
Create a new process in Java, exit the current process
编辑:我确实在上述问题中发布了我的答案。 :)