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

时间:2017-01-10 00:01:47

标签: java

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

3 个答案:

答案 0 :(得分:1)

Java版本9起的Javapackager包含捆绑程序参数-strip-native-commands,该参数将可执行文件保留在捆绑的JRE中。只需包含以下选项:

-Bstrip-native-commands=false

答案 1 :(得分:0)

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();

答案 2 :(得分:0)

这可能会提供更好的图片。

使用以下内容获取Java可执行文件。

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

重新构建类路径

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

从这里开始,您可以使用

启动新流程
Process.exec(javaExecutable, "-classpath", urls.join(":"), CLASS_WIH_MAIN)