2010-12-12 2 views
8

Как я могу запустить вторую платформу процесса Java независимо? В идеале это должна быть та же самая версия Java, которая в настоящее время работает. Есть ли полезные свойства системы?Как начать второй процесс Java?

ответ

6

Невозможно, в общем.

Рецепт, предоставленный в ответе @ khachik, не обязательно будет работать для реализации Java на Java.

  • Java-исполняемый не обязательно называется java и не обязательно жить в подкаталоге bin. Даже с Sun Java, в Windows есть два исполняемых файла; java и javaw.

  • Параметры команды для команды, запускающей JVM, различны для разных реализаций Java. Таким образом, этап ProcessBuilder может включать переносные аргументы.


Хотя большинство JVMs приняли первичные ВС java параметры командной строки, существуют многочисленные различия. Например:

  • IBM J9 использует j9 и j9w как имена исполняемых файлов.
  • BEA/Oracle JRockit имеет разные -X и -XX варианты.
  • Jikes RVM использует rvm в качестве исполняемого файла и поддерживает только подмножество вариантов Sun java.
  • IKVM в качестве исполняемого имени использует ikvm.

(Примечание: это только примеры, которые выделяются при беглом прочтении соответствующей онлайн-документации.)

+0

Любые ссылки для поддержки вашего первого требования? –

10

Вы можете использовать java.home системное свойство, чтобы найти текущую JVM:

String jvm = new java.io.File(new java.io.File(System.getProperty("java.home"), 
               "bin"), 
           "java").getAbsolutePath(); 

, а затем запустить его с помощью ProcessBuilder (или Runtime.exec).

Обратите внимание, что для JDK java.home указывает на каталог JRE, входящий в состав JDK.

1

Вы пытались использовать эти библиотеки Apache Commons? Если вы не дадите launcher project попытку. Это было очень полезно для меня некоторое время назад.

Вот описание проекта с их сайта:

Панель запуск Компонент предназначен для кросса пусковой платформы приложений Java.

Оригинальные классы Java взяты из проекта Tomcat 4.0.

Commons-launcher устраняет необходимость в сценарии пакетной или командной оболочки для запуска класса Java.В некоторых ситуациях, когда желательно исключить пакетный сценарий или сценарий оболочки, необходимо:

  • Вы хотите, чтобы не было необходимости определять, где определенные пути приложения, например. домашний каталог вашего приложения и т. д. Определение этого динамически в пакетных сценариях Windows очень сложно в некоторых версиях Windows или когда на платформах Unix используются программные ссылки.
  • Вы хотите избежать необходимости обрабатывать родные разделители файлов и путей или собственные проблемы с цитированием пути.
  • Необходимо выполнить определенные свойства системы, например. java.endorsed.dirs при работе с JDK 1.4.
  • Вы хотите разрешить пользователям передавать пользовательские аргументы JVM или системные свойства без необходимости синтаксического анализа и изменения порядка в вашем скрипте. Это может быть сложным и/или беспорядочным в командных и командных сценариях. Вы хотите загружать свойства системы из файла конфигурации, а не жестко кодировать их в своих командных и командных сценариях.
  • Вы хотите предоставить локализованные сообщения об ошибках, которые очень сложно сделать в командных и командных сценариях.
+0

Если я это понимаю, это не поможет запустить Java-процесс еще в любом внешнем процессе, где я знаю исполняемый файл. Но это проблема. Я не знаю текущий исполняемый файл. – Horcrux7