Каково значение JAVA_HOME для CentOS?

37

Я установил java через yum на CentOS, однако другой java-программе нужно знать, что такое переменная среды JAVA_HOME. Я знаю все о настройке переменных среды, но что мне установить? javaустановлен в /usr/bin/java, это не может быть там!

Рори
источник

Ответы:

54

На самом деле я нашел это,

это /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/. Я узнал, что это было сделано, update-alternatives --display javaи он показал мне каталог/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

Рори
источник
20

Я не совсем уверен, но если вы устанавливаете обычную RPMS, значение JAVA_HOME также может быть установлено на это:

/usr/java/default/

РЕДАКТИРОВАТЬ: Я только что проверил на моей домашней системе. Я создал этот файл:

/etc/profile.d/java.sh

Который содержит:

export JAVA_HOME=/usr/java/default/

и я использую официальную версию от Sun: jdk-1.6.0_12-fcs

РЕДАКТИРОВАТЬ: Вот как я настроил Java на моем компьютере :

Установить Java

Загрузите и установите Java JDK из Oracle

Сделайте это первичным

Убедитесь, что эта версия Java используется вместо версии OpenJDK с помощью следующих двух команд:

Первый

alternatives --install /usr/bin/java java /usr/java/default/bin/java 999999 \
           --slave /usr/bin/keytool keytool /usr/java/default/bin/keytool \
           --slave /usr/bin/rmiregistry rmiregistry /usr/java/default/bin/rmiregistry

второй

alternatives --install /usr/bin/javac javac /usr/java/default/bin/javac 999999 \
           --slave /usr/bin/jar jar /usr/java/default/bin/jar \
           --slave /usr/bin/rmic rmic /usr/java/default/bin/rmic

Установить JAVA_HOME

Убедитесь, что для всех пользователей в переменной среды JAVA_HOME установлено правильное значение:

echo "export JAVA_HOME=/usr/java/default/" > /etc/profile.d/java_home.sh
Нильс Бажес
источник
о, интересно :)
Рори
1
В /usr/java/defaultмоем CentOS 6 нет ни одной с установленными OpenJDK 1.6 и 1.7.
Даниэль Серодио
@DanielSerodio Правильно. Я четко описал «Загрузите и установите Java JDK из Oracle», и тогда он существует.
Нильс Басьес
2

Вы хотите установить JAVA_HOME в качестве корневого расположения JDK или JRE, например:

export JAVA_HOME=/usr/java/jdk1.3

Если JDK (комплект разработчика) установлен, ypu, вероятно, хочет, чтобы он указывал на это, иначе используйте путь JRE (среда выполнения Java). Затем, возможно, вы захотите установить переменную среды $ PATH для включения каталога bin:

export PATH=$PATH:/usr/java/jdk1.3/bin

Если вы используете tomcat, вам также может потребоваться установить CATALINA_HOME для пользователя tomcat.

export CATALINA_HOME=/path/to/tomcat

Чтобы установить это для системы, вы хотите отредактировать свой / etc / profile или добавить файл .sh в папку /etc/profile.d. Для конкретного пользователя вы можете поместить его в файлы пользователя ~ / .profile или ~ / .bash_profile.

Кайл Брандт
источник
Интересно, есть ли веская причина, по которой установка не делает этого для вас, если вы работаете как супер-пользователь, я всегда нахожу это раздражающим ...
Кайл Брандт
2

Ниже всегда работает идеально для меня:

[user@base ~]$ locate bin/java
/usr/bin/java
/usr/bin/javac
/usr/bin/javadoc
/usr/bin/javaws
/usr/java/jdk1.6.0_31/bin/java
/usr/java/jdk1.6.0_31/bin/javac
/usr/java/jdk1.6.0_31/bin/javadoc
/usr/java/jdk1.6.0_31/bin/javah
/usr/java/jdk1.6.0_31/bin/javap
/usr/java/jdk1.6.0_31/bin/javaws
/usr/java/jdk1.6.0_31/jre/bin/java
/usr/java/jdk1.6.0_31/jre/bin/java_vm
/usr/java/jdk1.6.0_31/jre/bin/javaws

Это означает, что я могу установить JAVA_HOME как /usr/java/jdk1.6.0_31

Prashant
источник
1

Я рассмотрел проблему, если кто-то изменит версию Java, используемую с:

alternatives --config java

Тогда любая жестко запрограммированная JAVA_HOMEверсия изменится (по крайней мере, это будет на Centos 6.6, на которую я сейчас смотрю). То есть нет /usr/java.

Это не кажется лучшим способом (открытым для отказа), но за 10 минут, которые я потратил на это, это кажется лучшим.

В /etc/bashrcя изменил настройку, JAVA_HOMEчтобы быть:

export JAVA_HOME=$(alternatives --display java | grep current | sed 's/link currently points to //' | sed 's|/bin/java||')

Вы должны сделать что-то похожее на MacOSX, но без всего grepи sedразбирать результат. Конечно, alternativesпредлагает аналогично более простое решение.

В любом случае, я надеюсь, что помог.


Обновить

Нет, это было бы JRE_HOME. JDK / SDK не так очевиден (я буду продолжать искать).

alternatives, Кажется, только о JRE по умолчанию. Я полагаюсь на ответ @Niels или просто устанавливаю Java с yumи устанавливаю JAVA_HOME на это (трюк в том, где я нашел, где это было установлено!).

yum install java-1.8.0-openjdk-devel.x86_64
cd /usr/lib/jvm 

Я заметил, java_1.8.0что это символическая ссылка, /etc/alternatives/java_sdk_1.8.0и поэтому установите мой $ JAVA_HOME в /usr/lib/jvm/java_1.8.0. В /etc/bashrc.

HankCa
источник
0

Как ни странно, весь смысл наличия переменной окружения JAVE_HOME заключается в том, что вам не нужно указывать путь к каждой программе, он может получить этот путь путем поиска этой переменной.

В любом случае, правильный способ найти переменную окружения для JAVA_HOME - использовать echo:

[root@host ~]# echo $JAVA_HOME
/usr/java/j2sdk1.4.2_09

Выполнение этой команды покажет путь независимо от того, какую версию вы используете, из командной строки.

Дэйв Драгер
источник
2
Переменная не была установлена.
Рори
0

re: Centos7, обратитесь к файлу /etc/java/java.conf.

в нем указывается, что JAVA_HOME находится в следующем каталоге: / usr / lib / jvm / java

я проверил, это правильная версия JDK я загрузил через Yum, и так ...

мой env не имеет JAVA_HOME, установленного по умолчанию, поэтому я установил его в .bash_profile

theRiley
источник
0

Я обнаружил, что менеджер пакетов может размещаться в разных местах, поэтому использование которого (вам нужно явно установить это, если вы используете контейнер), следующее немного менее хрупко

javaCompiler=$(which javac)
javaBin=$(dirname $(readlink -f $javaCompiler))
javaHome=${javaBin%/*}
export JAVA_HOME=$javaHome

или для JRE

javaExec=$(which java)
javaBin=$(dirname $(readlink -f $javaExec))
javaHome=${javaBin%/*}
export JRE_HOME=$javaHome
Жюль Клементс
источник