Какова правильная цель для переменной JAVA HOME envrionment для дистрибутива Linux OpenJDK на основе Debian?
В Windows, JAVA_HOME должен указывать на папку установки JDK (так что JAVA_HOME/bin содержит все исполняемые файлы и JAVA_HOME/libs содержит все значения по умолчанию jar библиотеки).
если я загружаю пакет JDK Sun и устанавливаю его в Linux, это та же процедура.
однако мне нужно использовать пакет OpenJDK по умолчанию Kubuntu. Проблема в том, что все исполняемые файлы помещаются в /usr/bin. Но банки помещаются в /usr/share/java. Так как они не находятся под одним и тем же JAVA_HOME папка у меня возникли проблемы с Grails и, возможно, будут проблемы с другими приложениями, которые ожидают стандартную структуру Java.
если я использую:
JAVA_HOME=/usr
все приложения и скрипты, которые хотят использовать любой исполняемый файл Java, могут использовать стандартную процедуру
call $JAVA_HOME/bin/executable. Однако, поскольку банки находятся в другом месте, они не всегда находятся (пример: в grails я получаюClassDefNotFoundнаnative2ascii).
на другая рука, если я использую:
JAVA_HOME=/usr/share/java
ни один из исполняемых файлов Java (
java,javacи т. д.) можно найти.
Итак, каков правильный способ обработки JAVA_HOME переменная в Linux на базе Debian?
Спасибо за вашу помощь,
Луис
13 ответов:
то, что, наконец, сработало для меня (Grails теперь работает гладко), делает почти так же, как Стив Б. указал:
JAVA_HOME=/usr/lib/jvm/default-javaтаким образом, если пользователь изменяет JDK по умолчанию для системы,
JAVA_HOMEдо сих пор работает.
default-javaявляется символической ссылкой на текущий JVM.
Если вы используете альтернативы, вы можете установить
JAVA_HOMEна основе символической java, как это:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
стандартная установка Ubuntu, похоже, помещает различные версии Java в
/usr/lib/jvm. Элементjavac, java, который вы найдете в своем пути, будет softlink к этому.нет никаких проблем с установкой собственной версии Java в любом месте вам нравится, пока вы установите
JAVA_HOMEпеременная окружения и убедитесь, что у вас есть новая Javabinна вашем пути.простой способ сделать это-иметь Java home существует как softlink, так что если вы хотите обновить или переключить версии вы нужно только изменить каталог, на который это указывает - например:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
обычно у меня нет переменной окружения JAVA_HOME. Java может настроить его сам. Внутри java java.свойство домашней системы должно быть доступно.
насколько я помню, я использовал скрипт update-java-alternatives вместо update-alternatives. И он правильно установил JAVA_HOME для меня.
Если у вас есть проблемы с JAR-файлами, которые не найдены, я также гарантирую, что ваш путь к классам будет включать местоположение этих файлов. Однако я нахожу, что путь к классам часто должен быть установлен по-разному для разных программ и часто заканчивается тем, что нужно установить уникально для отдельных программ.
обновленный ответ, который решит вашу проблему, а также просто общее хорошее руководство по установке 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.
как обновление для пользователя fedora , альтернативы устанавливают текущий каталог java в /usr / java / default
таким образом, вы должны установить JAVA_HOME в /usr/java/default, чтобы всегда иметь альтернативный выбор curent в вашем classpath
НТН !
моей правильной целью всегда было загрузить его с Sun и просто установить его таким образом. Тогда вы точно знаете, в какой каталог все идет.
но если вы предпочитаете придерживаться странного способа, которым Debian устанавливает его, моим лучшим предположением будет родительский каталог чуть выше, где расположены двоичные файлы java и javac.
(поскольку, когда вы указываете его в своем пути, это $JAVA_HOME/bin) (Так было бы и в вашем случае ... $JAVA_HOME / доля и $JAVA_HOME будет / usr ?)
Эх, это звучит неправильно...
Мне тоже интересно услышать ответ на этот вопрос!
пожалуйста, посмотрите, что делает команда update-alternatives (у нее есть хороший человек...).
коротко-что происходит, когда у вас есть java-sun-1.4 и java-opensouce-1.0 ... какой "Ява"? Это в Debian "/usr/Бен/Явы" и символьную ссылку "/usr/Бен/Ява-солнце-1.4" альтернатива "/usr/Бен/Ява"
изменить: Как сказал Ричард,
update-alternativesне хватает. Вам действительно нужно использоватьupdate-java-alternatives. Подробнее в:
Comments