Можно ли запускать файлы jar с использованием разных версий java?

Итак, мы запускаем hadoop на машине Power PC (64 бит). Он работает с использованием IBM JDK. Однако в этой программе уменьшения карты hadoop порождаются различные процессы (с использованием класса ProcessBuilder), которые выполняют программы jar. Проблема в том, что эти программы не работают с виртуальной машиной IBM JDK и поэтому требуют Open JDK. Точно так же у hadoop проблемы с запуском OpenJDK на Power PC. Поэтому мне было интересно, можно ли выполнить файл jar, используя другую версию java. Так, например, в этом случае hadoop использует IBM JDK, а файлы jar, которые выполняются в программе сокращения карты, используют Open JDK. По сути, нам нужно использовать разные виртуальные машины Java для программ, работающих одновременно.


person MetallicPriest    schedule 16.04.2015    source источник
comment
Что мешает программам использовать IBM JDK и как процессы jar порождаются из hadoop?   -  person Deepak Bala    schedule 16.04.2015
comment
Ну, я действительно не знаю, но известно, что программа, которую я запускаю, дает сбой с IBM JDK. Процессы создаются в программе сокращения карты с использованием класса ProcessBuilder в java.   -  person MetallicPriest    schedule 16.04.2015


Ответы (2)


В своем комментарии вы дали наиболее важную информацию - создание через класс ProcessBuilder. Этот класс выполняет вызовы на уровне ОС, поэтому вы можете запускать любой процесс с его помощью, и они полностью отделены от процесса Java, который их запустил. Итак, общий ответ - «да, это возможно». Просто убедитесь, что ProcessBuilder вызывает другую установку Java.

person Ray    schedule 16.04.2015
comment
Вы знаете, как вызвать другую установку Java с помощью класса ProcessBuilder? Я имею в виду, используя какой метод и какие аргументы? - person MetallicPriest; 16.04.2015
comment
ProcessBuilder просто выполняет вызов на уровне system. Просто укажите в вызове полный путь к другой установке Java. - person Ray; 16.04.2015

Ваши версии Java - это просто ссылка на соответствующие каталоги установки. Поэтому, когда вы устанавливаете различные (загрузки здесь: http://www.ibm.com/developerworks/java/jdk/linux/download.html), вам просто нужно изменить ссылку (ln -s) на этот подкаталог. Например, мы сохранили 4 версии java в системах:

/usr/java/java_7_64bt
/usr/java/java_7_32bt
/usr/java/java_6_64bt
/usr/java/java_6_32bt
# ls -l /usr/java
lrwxrwxrwx. 1 root root 22 Aug  5 15:00 /usr/bin/java ->  /usr/java/java_7_64bit/java

Затем другие программы могут просто вызвать либо /usr/bin/java, либо прямой путь к нужным версиям, в то время как hadoop вызывает что-то еще.

person D.J.M.C    schedule 10.08.2015