启动单独的进程以使用相同的 JRE 运行 Java 程序



我想从我的java程序启动一个单独的进程,以使用当前java程序正在执行的相同JRE运行另一个Java程序。通常,我可以使用 System.getProperty 获取 java 可执行文件的路径,但 java 程序在捆绑的 jre(Mac 应用程序包)中运行,该包实际上不包含 java 可执行文件。因此,我想知道是否有任何 API 可以直接在单独的进程中运行 Java 程序?

Javapackager从Java版本9开始包含bundler参数-strip-native-commands,它将可执行文件保留在捆绑的JRE中。只需包括以下选项:

-Bstrip-native-commands=false

API 是公共托管在这里的:http://docs.oracle.com/javase/8/docs/api/

以及您正在寻找的信息 System实用程序类的缺点:

此处列出了所有可用属性:http://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties--

当前的JVM位置可通过"java.home"获得。

所以你寻找的是:

 String javaPath = new File( System.getProperty("java.home"),"bin/java").absolutePath();

这可能会提供更好的画面。

使用以下方法获取 Java 可执行文件。

System.getProperty("java.home") + "/bin/java" 

重构类路径,

((URLClassLoader() Thread.currentThread().getContextClassLoader()).getURL() 

从这里,您可以使用以下方法开始新过程

Process.exec(javaExecutable, "-classpath", urls.join(":"), CLASS_WIH_MAIN)

最新更新