В Windows JAVA_HOME
должен указывать на папку установки JDK (чтобы она JAVA_HOME/bin
содержала все исполняемые файлы и JAVA_HOME/libs
все jar
библиотеки по умолчанию ).
Если я загружу пакет Sun JDK и установлю его в Linux, это будет та же процедура.
Однако мне нужно использовать пакет Kubuntu по умолчанию OpenJDK. Проблема в том, что все исполняемые файлы помещаются в /usr/bin
. Но банки помещаются внутрь /usr/share/java
. Поскольку они не находятся в одной JAVA_HOME
папке, у меня проблемы с Grails, и, возможно, возникнут проблемы с другими приложениями, которые ожидают стандартной структуры Java.
Если я использую:
JAVA_HOME=/usr
Все приложения и сценарии, которые хотят использовать любой исполняемый файл Java, могут использовать стандартную процедуру
call $JAVA_HOME/bin/executable
. Однако, так как банки находятся в другом месте, они не всегда находили (пример: в Грааль я получаюClassDefNotFound
заnative2ascii
).С другой стороны, если я использую:
JAVA_HOME=/usr/share/java
Ни один из исполняемых файлов Java (
java
,javac
и т. Д.) Не найден.
Итак, как правильно обрабатывать JAVA_HOME
переменную в Linux на основе Debian?
Спасибо за помощь, Луис
источник
Если вы используете альтернативы для управления несколькими версиями java, вы можете установить их на
JAVA_HOME
основе символьной java (или javac) следующим образом:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
источник
/usr/bin/java
указывают на скрипт (/usr/libexec/eselect-java/run-java-tool.bash
). тем не менее, это хороший подход. единственное, что я бы изменил, - это использовать встроенную замену Bash, чтобы избежать появленияsed
, например:JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
на,java
потому что не у всех установлен JDK; только JREСтандартная установка Ubuntu, похоже, включает различные версии Java
/usr/lib/jvm
.javac
, Java вы найдете на вашем пути будет к этому мягкой ссылке .Нет проблем с установкой вашей собственной версии Java в любом месте, если вы
JAVA_HOME
задаете переменную среды и убедитесь, чтоbin
на вашем пути есть новая Java .Простой способ сделать это - сделать так, чтобы домашняя страница Java существовала как программная ссылка, так что если вы хотите обновить или переключить версии, вам нужно только изменить каталог, на который это указывает, например:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
источник
Обычно у меня нет переменной окружения JAVA_HOME. Java может установить это сама. Внутри java должно быть доступно системное свойство java.home.
источник
Попробуйте также установить переменную JAVA_LIB.
источник
Если у вас есть проблемы с тем, что файлы JAR не обнаруживаются, я бы также убедился, что ваш CLASSPATH настроен на включение местоположения этих файлов. Однако я обнаружил, что CLASSPATH часто нужно устанавливать по-разному для разных программ, и часто в итоге получается что-то, что нужно установить уникально для отдельных программ.
источник
Обновленный ответ, который решит вашу проблему, а также просто общие полезные инструкции по установке Oracle Java 7 на Ubuntu можно найти здесь: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
источник
Я обнаружил аналогичные проблемы с пакетами openjdk-6-jre и openjdk-6-jre-headless в Ubuntu.
Моя проблема была решена путем очистки пакетов openjdk-6-jre и openjdk-6-jre-headless и их повторной установки. Альтернативы обновляются только при новой установке пакетов openjdk-6-jre и openjdk-6-jre-headless.
Ниже приведен пример установки после продувки:
aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists aptitude install --without-recommends openjdk-6-jre # Installing without some extras Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62267 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... Setting up tzdata-java (2012e-0ubuntu0.10.04) ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/java to provide /usr/bin/java (java) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode. Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode. ...
Вы можете увидеть выше, что
update-alternatives
запускается для установки ссылок для различных двоичных файлов Java.После этой установки есть также ссылки
/usr/bin
, ссылки/etc/alternatives
и файлы для каждого двоичного файла в/var/lib/dpkg/alternatives
.ls -l /usr/bin/java /etc/alternatives/java /var/lib/dpkg/alternatives/java lrwxrwxrwx 1 root root 40 2013-01-16 14:44 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java lrwxrwxrwx 1 root root 22 2013-01-16 14:44 /usr/bin/java -> /etc/alternatives/java -rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/java
Давайте продолжим установку без продувки.
aptitude remove openjdk-6-jre aptitude install --without-recommends openjdk-6-jre Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62293 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... ...
Как видите,
update-alternatives
не срабатывает.После этой установки нет файлов для двоичных файлов Java в
/var/lib/dpkg/alternatives
, нет ссылок/etc/alternatives
и нет ссылок в/usr/bin
.Удаление файлов
/var/lib/dpkg/alternatives
также прерываетсяupdate-java-alternatives
.источник
Ubuntu 12.04 это работает ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
источник
В качестве обновления для пользователя Fedora альтернативы устанавливают текущий каталог java на / usr / java / default.
поэтому вы должны установить свой JAVA_HOME в / usr / java / default, чтобы всегда иметь альтернативный текущий выбор в вашем пути к классам
HTH!
источник
Я всегда стараюсь установить JAVA_HOME в соответствии с
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
Таким образом, обе альтернативы указывают на одно и то же место.
источник
Насколько я помню, я использовал скрипт update-java-alternatives вместо update-alternatives. И он правильно установил JAVA_HOME для меня.
источник
Пожалуйста, посмотрите, что делает команда update-alternatives (у нее хороший человек ...).
Вкратце - что происходит, когда у вас есть java-sun-1.4 и java-opensouce-1.0 ... какой из них принимает "java"? Это debian "/ usr / bin / java" является символической ссылкой, а "/usr/bin/java-sun-1.4" является альтернативой "/ usr / bin / java"
Изменить: Как сказал Ричард,
update-alternatives
этого недостаточно. Вам действительно нужно использоватьupdate-java-alternatives
. Больше информации:https://help.ubuntu.com/community/Java
источник
Моя правильная цель всегда заключалась в том, чтобы загрузить его с Sun и просто установить таким образом. Тогда вы точно знаете, в каком каталоге все находится.
Но если вы предпочитаете придерживаться необычного способа установки Debian, лучше всего предположить, что это родительский каталог, расположенный чуть выше того места, где расположены двоичные файлы java и javac.
(поскольку, когда вы указываете его в своем пути, это $ JAVA_HOME / bin) (Так что в вашем случае это будет ... $ JAVA_HOME / share, а $ JAVA_HOME будет / usr?)
Эх, звучит не так ...
Мне тоже интересно услышать ответ на это!
источник