Итак, мы запускаем 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 для программ, работающих одновременно.
Можно ли запускать файлы jar с использованием разных версий java?
Ответы (2)
В своем комментарии вы дали наиболее важную информацию - создание через класс ProcessBuilder
. Этот класс выполняет вызовы на уровне ОС, поэтому вы можете запускать любой процесс с его помощью, и они полностью отделены от процесса Java, который их запустил. Итак, общий ответ - «да, это возможно». Просто убедитесь, что ProcessBuilder
вызывает другую установку Java.
Ваши версии 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 вызывает что-то еще.