Я установил Java через yum на CentOS, однако другой программе Java необходимо знать, что такое переменная окружения JAVA_HOME. Я знаю все о настройке переменных окружения, но что мне делать? java
установлен в /usr/bin/java
, этого не может быть!
На самом деле я нашел это,
его /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
Я не совсем уверен, но если вы установите обычную 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 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:
echo "export JAVA_HOME=/usr/java/default/" > /etc/profile.d/java_home.sh
Ниже всегда отлично работает для меня:
[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
Вы хотите установить JAVA_HOME в качестве корневого расположения JDK или JRE, например:
export JAVA_HOME=/usr/java/jdk1.3
Если установлен JDK (комплект разработчика), вы, вероятно, захотите, чтобы он указывал на него, иначе используйте путь 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.
Я рассмотрел проблему, если изменить версию используемой 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
.
Это странно, но весь смысл переменной окружения JAVE_HOME состоит в том, что вам не нужно указывать путь к каждой программе, она может получить этот путь, ища эту переменную.
В любом случае, правильный способ найти переменную окружения для JAVA_HOME - использовать echo:
[root@host ~]# echo $JAVA_HOME
/usr/java/j2sdk1.4.2_09
Запуск этой команды отобразит путь независимо от того, какую версию вы используете, из командной строки.
re: Centos7, обратитесь к файлу /etc/java/java.conf.
в нем указано, что JAVA_HOME находится в следующем каталоге: / usr / lib / jvm / java
Я проверил, это правильная версия jdk, которую я загрузил через yum, и так ...
в моем env по умолчанию не установлен JAVA_HOME, поэтому я установил его в .bash_profile
Я обнаружил, что диспетчер пакетов можно размещать в разных местах, поэтому, используя который (вам нужно будет явно установить это, если вы используете контейнер) следующее немного менее хрупкое
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