Как определить JAVA_HOME в Debian / Ubuntu?

95

В Ubuntu можно иметь несколько JVM одновременно. По умолчанию выбирается с помощью update-alternatives. Но это не устанавливает JAVA_HOMEпеременную окружения из-за политики debian .

Я пишу скрипт запуска (bash), который запускает Java-приложение. Это Java-приложение нуждается в JAVA_HOMEпеременной окружения. Так, как получить путь JVM, который в настоящее время выбран update-alternatives?

Витек
источник

Ответы:

137

Для JRE что-то вроде этого должно сработать:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
источник
17
Мне нужен был дом JDK вместо JRE, но я получил это, используя: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Спасибо!
Витек
когда я попробовал команду echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), на выходе было /usr/lib/jvm/java-7-oracle/jre/и нет/usr/lib/jvm/java-7-oracle/
Сумит Рамтеке
Код, указанный в rsaddey, работает правильно
Sumit Ramteke
43

Решение danadam может быть легко адаптировано для извлечения пути JDK (т.е. не JRE) по мере необходимости:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Ищет Java-компилятор javac (вместо java), включенный в JDK (но не JRE).
  • Не имеет трейлинга / (удалено с помощью sed s: / bin ... вместо s: bin ...)
rsaddey
источник
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

Это .bashrcбыло удобно для меня.

Дэвид
источник
9

Итак, вы говорите, что эта команда ничего не делает для вас?

sudo update-alternatives --config java 
djangofan
источник
2
Предполагается ли установить ваш JAVA_HOME? Я обнаружил, что update-java-alternatives - лучший способ обновить Java, поскольку update-альтернативы не обновляют все связанные с Java альтернативы. См. Askubuntu.com/questions/141791
Джеймс МакМэхон
Да, но я встречал экземпляры Linux, в которых были альтернативы обновления, но не было установлено альтернатив альтернативы обновления.
Джангофан
3

Я установил Java с

sudo apt-get install openjdk-7-jre-headless

а затем найти место

ls -al /etc/alternatives/java
prule
источник
2

Как продолжение данадамов ответьте:

Прежде всего, установите 2-ую Java JRE в качестве 3-й опции Java с приоритетом «3»:

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Затем вы можете перечислить их:

update-alternatives --list java

Вы можете установить альтернативу вручную, используя это:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Затем ваш скрипт может установить его на лету, вот так:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Это лучше показывает, что делает команда sed. Хотя вам все еще нужно установить ссылки для javaw, javac и т. Д., А также для каждой из них по отдельности.

djangofan
источник
1

Некоторое время назад я создал учебник на форуме Ubuntu о том, как установить последнюю версию JRE / JDK с веб-сайта Java. В нем также рассказывается, как включить его для всей системы, добавив расположение JRE / JDK в переменную PATH. Если хотите, вы также можете добавить JAVA_HOME в скрипт, упомянутый в конце темы.

Проверьте это: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
источник
1

Если java настроен с помощью update-alternativesпеременной PATH или был добавлен в нее вручную, то нет "/usr/bin/java"необходимости в жестком кодировании . Я использую это решение в моем .bashrc:

export JAVA_HOME=$(readlink -m $(which java)/../..)

Фредди
источник