Какой правильный путь для JAVA_HOME в системе Linux, которая использует альтернативы?

Определение правильного пути для JAVA_HOME немного сложен в системе Ubuntu, потому что он использует альтернативы. На моей машине это то, как альтернативы создают как минимум два уровня косвенности, прежде чем они доберутся до фактической Java или Javac.

usr/bin/javac -> /etc/alternatives/

/etc/alternatives/java -> /usr/lib/jvm/jdk1.7/bin/javac

Если я установлю JAVA_HOME в /usr/lib/jvm/jdk1.7, тогда возможно, что моя система Java может стать несовместимой с Java, на который указывает JAVA_HOME, если я обновлю альтернативы, чтобы использовать другую Java.

У меня вопрос, каково правильное значение для JAVA_HOME в системе, которая использует альтернативы. Я склонен думать, что JAVA_HOME должен быть установлен в /usr

Таким образом, TOMCAT или любое другое программное обеспечение, которое его использует, добавит 'bin' к JAVA_HOME и найдите все исполняемые файлы, которые ему нужны.

Это правильное значение для JAVA_HOME на системах, которые используют альтернативы. У большинства программ использовать JAVA_HOME только для поиска исполняемых файлов, или они будут использовать это значение для поиска других артефактов (например, политики безопасности и т. д.), которые поставляются в комплекте с JDK? Если первое верно, то я чувствую, что мы можем использовать /usr за JAVA_HOME, но если последнее верно, то я думаю, что единственный способ использовать JAVA_HOME правильно, жертвуя функциональностью альтернатив.

2 ответа

Решение

Хороший вопрос - я использую "альтернативы" в Linux, и все "просто работает" - мне никогда не приходилось об этом думать.

Я считаю, что это ответ:

1) "альтернативы" устанавливает символическую ссылку на то, на что настроена ваша "настоящая" Java в данный момент

2) Все, что вам нужно сделать, это установить $JAVA_HOME на символическую ссылку

Я не нашел подходящего прямого решения проблемы, поэтому вот мой обходной путь: добавьте следующее в bachrc

      javapath=$( readlink --canonicalize /usr/bin/java)
removebin="/bin/java"
removejre="/jre"
javapath2=${javapath/$removebin/}
export JAVA_HOME=${javapath2/$removejre/}

Затем сделайте источник, чтобы перезагрузить JAVA_HOME всякий раз, когда вы меняете версию Java, используя альтернативы.

      source ~/.bashrc 

Объяснение: я получил путь к классу java из переменной, установленной приложением update-alternatives, а затем удалил из нее часть bin/java, а затем назначил ее JAVA_HOME. Этот процесс происходит при входе в систему. если вы измените версию Java в середине сеанса, вам придется перезагрузить профиль.

Другие вопросы по тегам