Java 如何在新进程中执行Jar文件并关闭原始Jar?
我有2个jar文件。我希望jara打开jarb,然后让jara终止,让jarb运行。我该怎么做呢Java 如何在新进程中执行Jar文件并关闭原始Jar?,java,jar,runtime,execution,terminate,Java,Jar,Runtime,Execution,Terminate,我有2个jar文件。我希望jara打开jarb,然后让jara终止,让jarb运行。我该怎么做呢 编辑:我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的一个新实例中执行JarB,然后JarA使用系统。退出(0)是否要启动一个新的JVM实例来运行另一个Jar,然后终止?这并不常见 或者,您可以将Jar B包含到类路径中,并使用它从Jar A中的代码中提供的类。要启动一个新的JVM,您可以像启动任何其他操作系统命令一样启动外部java进程,请在 在Java中启动外部进程
编辑:我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的一个新实例中执行JarB,然后JarA使用系统。退出(0)是否要启动一个新的JVM实例来运行另一个Jar,然后终止?这并不常见
或者,您可以将Jar B包含到类路径中,并使用它从Jar A中的代码中提供的类。要启动一个新的JVM,您可以像启动任何其他操作系统命令一样启动外部
java
进程,请在
在Java中启动外部进程有很多注意事项,您可以在这里找到很多资料,因此搜索process
和ProcessBuilder
jar
文件不运行或终止;即jvm
,例如通过命令java
启动。例如,运行以下命令时:
java -classpath A.jar A.Main
启动一个新的jvm
,它执行类A.main
现在该方法Main.Main()
,可以调用B.jar
中类的方法,如果它在类路径中。例如,如果命令是
java -classpath A.jar;B.jar pkg.A
然后在A.Main.Main
中可以
B.SomeClass.SomeMethod()
其中B
位于B.jar
这就是你说“打开B.jar”的意思吗?请注意,这并不是“关闭”另一个“A.jar”,不管这意味着什么。假设,即使在阅读了下面的答案之后,您仍然希望在一个单独的JVM进程中调用“jar-B”,该进程未连接到父进程“jar-A”,那么您最好的选择可能是使用类似于“cmd/start”(适用于windows)的东西或使用“sh…&”(对于*nix)(来自JAR-A中的java程序)我有一个可能的部分答案: 因此,如果您在Windows上使用Java,那么您可以使用
newProcessBuilder(“java”、“-classpath”、“B.jar”、“B.Main”).inheritIO().start()代码>
这不仅会启动进程,而且会在同一个命令提示窗口中启动进程。对于退出jara,包括一个System.exit(0)创建进程B之后,JAR A的主方法中的代码>
对于Linux版本,我不是很确定,因为我的程序遇到了相同/类似的问题
编辑:我确实在上面的问题中发布了我的答案。:) 通过“Closetheoriginaljar?”可以关闭运行该Jar的JVM。但我更喜欢@gd1的“类路径”策略。我的意思是我希望JarA在JVM的一个实例中打开,然后我希望JarA在JVM的一个新实例中执行JarB,然后JarA使用system.exit(0)
B.SomeClass.SomeMethod()