Какой правильный путь для 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, и все "просто работает" - мне никогда не приходилось об этом думать.
Я считаю, что это ответ:
JAVA_HOME=/usr/lib/jvm/default-java
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 в середине сеанса, вам придется перезагрузить профиль.