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