我想从我的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)