W systemie Windows JAVA_HOME
musi wskazywać folder instalacyjny JDK (tak, aby JAVA_HOME/bin
zawierał wszystkie pliki wykonywalne i JAVA_HOME/libs
wszystkie domyślne jar
biblioteki).
Jeśli pobiorę pakiet Sun JDK i zainstaluję go w systemie Linux, będzie to ta sama procedura.
Muszę jednak użyć domyślnego pakietu OpenJDK Kubuntu. Problem polega na tym, że wszystkie pliki wykonywalne są umieszczone w plikach /usr/bin
. Ale słoiki są włożone /usr/share/java
. Ponieważ nie znajdują się w tym samym JAVA_HOME
folderze, mam problem z Grails i być może będą problemy z innymi aplikacjami, które oczekują standardowej struktury Java.
Jeśli używam:
JAVA_HOME=/usr
Wszystkie aplikacje i skrypty, które chcą używać dowolnego pliku wykonywalnego Java, mogą korzystać ze standardowej procedury
call $JAVA_HOME/bin/executable
. Jednakże, ponieważ słoje są w innym miejscu, nie są one zawsze znaleźć (przykład: w Grails DostajęClassDefNotFound
zanative2ascii
).Z drugiej strony, jeśli używam:
JAVA_HOME=/usr/share/java
Żaden z plików wykonywalnych (Java
java
,javac
itp) można znaleźć.
Jaki jest więc prawidłowy sposób obsługi JAVA_HOME
zmiennej w systemie Linux opartym na Debianie?
Dzięki za pomoc, Luis
źródło
Jeśli używasz alternatyw do zarządzania wieloma wersjami Java, możesz ustawić
JAVA_HOME
oparte na dowiązaniu symbolicznym java (lub javac) w następujący sposób:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
źródło
/usr/bin/java
wskazanie skryptu (/usr/libexec/eselect-java/run-java-tool.bash
). nadal jest to miłe podejście. jedyne, co bym zmienił, to użycie wbudowanej zamiany Basha, aby uniknąćsed
JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
na,java
ponieważ nie każdy ma zainstalowany pakiet JDK; tylko JREWydaje się, że standardowa instalacja Ubuntu zawiera różne wersje Javy
/usr/lib/jvm
.javac
, Java można znaleźć na swojej drodze będzie dowiązanie do tego.Nie ma problemu z zainstalowaniem własnej wersji Java w dowolnym miejscu, o ile ustawisz
JAVA_HOME
zmienną środowiskową i upewnij się, że nowa Java jestbin
na swojej ścieżce.Prostym sposobem na to jest stworzenie strony głównej Java jako miękkiego łącza, więc jeśli chcesz zaktualizować lub zmienić wersje, musisz tylko zmienić katalog, na który wskazuje - np:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
źródło
Zwykle nie mam żadnej zmiennej środowiskowej JAVA_HOME. Java może to skonfigurować samodzielnie. Wewnątrz java powinna być dostępna właściwość systemowa java.home.
źródło
Spróbuj ustawić również zmienną JAVA_LIB.
źródło
Jeśli masz problemy z nie znalezieniem plików JAR, upewnię się również, że CLASSPATH jest ustawione tak, aby zawierało lokalizację tych plików. Uważam jednak, że CLASSPATH często musi być ustawione inaczej dla różnych programów i często kończy się tym, że jest czymś, co można ustawić indywidualnie dla poszczególnych programów.
źródło
Zaktualizowaną odpowiedź, która rozwiąże Twój problem, a także tylko ogólne dobre instrukcje dotyczące instalacji Oracle Java 7 na Ubuntu można znaleźć tutaj: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
źródło
Odkryłem podobne problemy z pakietami openjdk-6-jre i openjdk-6-jre-headless w Ubuntu.
Mój problem został rozwiązany przez wyczyszczenie pakietów openjdk-6-jre i openjdk-6-jre-headless i ponowne zainstalowanie. Alternatywy są aktualizowane tylko podczas nowej instalacji pakietów openjdk-6-jre i openjdk-6-jre-headless.
Poniżej znajduje się przykład instalacji po oczyszczeniu:
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. ...
Możesz zobaczyć powyżej, że
update-alternatives
jest uruchamiany, aby ustawić łącza do różnych plików binarnych Java.Po tej instalacji dostępne są również łącza w
/usr/bin
, łącza w/etc/alternatives
i pliki dla każdego pliku binarnego w/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
Porównajmy to z instalacją bez czyszczenia.
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) ... ...
Jak widać,
update-alternatives
nie jest wyzwalany.Po tej instalacji nie ma żadnych plików dla plików binarnych Java w programie
/var/lib/dpkg/alternatives
, żadnych łączy/etc/alternatives
ani łączy w/usr/bin
.Usuwanie plików
/var/lib/dpkg/alternatives
również się psujeupdate-java-alternatives
.źródło
Ubuntu 12.04 to działa ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
źródło
Jako aktualizacja dla użytkownika Fedory, alternatywą jest ustawienie bieżącego katalogu java na / usr / java / default
więc musisz ustawić JAVA_HOME na / usr / java / default, aby zawsze mieć alternatywy aktualnie wybrane w ścieżce klas
HTH!
źródło
Zawsze ustawiam JAVA_HOME zgodnie z
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
W ten sposób obie alternatywy wskazują tę samą lokalizację
źródło
O ile pamiętam, zamiast skryptu update-alternatives użyłem skryptu update-java-alternatives. I ustawił poprawnie JAVA_HOME.
źródło
Zobacz, co robi polecenie update-alternatives (ma miłego człowieka ...).
Krótko - co się dzieje, gdy masz java-sun-1.4 i java-opensouce-1.0 ... która z nich bierze "java"? Debian „/ usr / bin / java” jest dowiązaniem symbolicznym, a „/usr/bin/java-sun-1.4” jest alternatywą dla „/ usr / bin / java”
Edycja: Jak powiedział Richard,
update-alternatives
nie wystarczy. Właściwie musisz użyćupdate-java-alternatives
. Więcej informacji na:https://help.ubuntu.com/community/Java
źródło
Moim właściwym celem zawsze było pobranie go z Sun i zainstalowanie w ten sposób. Wtedy wiesz dokładnie, w którym katalogu wszystko się znajduje.
Ale jeśli wolisz trzymać się dziwnego sposobu, w jaki Debian instaluje go, moim najlepszym przypuszczeniem byłby katalog nadrzędny tuż nad miejscem, w którym znajdują się pliki binarne java i javac.
(od kiedy podasz to w swojej ścieżce to $ JAVA_HOME / bin) (Więc w twoim przypadku byłoby to ... $ JAVA_HOME / share a $ JAVA_HOME byłoby / usr?)
Ech, to nie brzmi dobrze ...
Jestem również zainteresowany odpowiedzią na to pytanie!
źródło