Как каждый получает местоположение исполняемого файла в настоящее время рабочей JVM во время времени выполнения? Я хотел бы инстанцировать другой JVM как подпроцесса с помощью класса ProcessBuilder.
Я знаю, что существует java.home
Свойство System, но это не указывает местоположение исполняемого файла JVM. Я понимаю, что мог сделать что-то вроде этого для получения пути:
System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"
Этот код не независим от платформы, потому что имя исполняемого файла Windows java.exe
, нет java
. Существует ли способ получить путь исполняемого файла JVM, который принимает особенности платформы во внимание?
Вы пытаетесь разветвить всю JVM.
Но если вы действительно должны, вы можете попробовать просто выполнить java -arguments
напрямую, поскольку большинство стандартных установок java помещают java на путь cli.
Да, есть способ получить путь к исполняемому файлу JVM (если он существует). Включите его в конфигурацию приложения. Есть много способов сделать это: аргумент командной строки - java myApp.Main / path / to / Java; Свойства - java -Dpath.to.java = / путь / к / java; и т. д.
Если вы хотите истинную независимость от платформы, тогда вся ваша схема ошибочна, потому что существование исполняемого файла JVM не гарантируется. Я мог представить себе JVM без необходимости в исполняемом файле Java.
Если вы хотите 99,99% независимости от платформы, я думаю, у вас есть необходимые инструменты.