Jaka jest wartość JAVA_HOME dla CentOS?

37

Zainstalowałem java przez yum na CentOS, jednak inny program Java musi wiedzieć, czym jest zmienna środowiskowa JAVA_HOME. Wiem wszystko o ustawianiu zmiennych środowiskowych, ale co mam ustawić? javajest zainstalowany w /usr/bin/java, nie może tam być!

Rory
źródło

Odpowiedzi:

54

Właściwie to znalazłem

to jest /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/. Dowiedziałem się, co to było, update-alternatives --display javai pokazał mi katalog/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

Rory
źródło
20

Nie jestem do końca pewien, ale jeśli zainstalujesz normalne RPMS, wartość JAVA_HOME można również ustawić na:

/usr/java/default/

EDYCJA: Właśnie sprawdziłem w moim systemie domowym. Utworzyłem ten plik:

/etc/profile.d/java.sh

To zawiera:

export JAVA_HOME=/usr/java/default/

i używam oficjalnej wersji Sun: jdk-1.6.0_12-fcs

EDYCJA: Oto jak skonfigurować Javę na moim komputerze :

Zainstaluj Javę

Pobierz i zainstaluj Java JDK z Oracle

Uczyń to podstawowym

Upewnij się, że ta Java jest używana zamiast wersji OpenJDK za pomocą następujących dwóch poleceń:

Pierwszy

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

druga

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

Ustaw JAVA_HOME

Upewnij się, że wszyscy użytkownicy mają zmienną środowiskową JAVA_HOME ustawioną na poprawną wartość:

echo "export JAVA_HOME=/usr/java/default/" > /etc/profile.d/java_home.sh
Niels Basjes
źródło
interesujące. :)
Rory,
1
Nie ma go /usr/java/defaultw moim pudełku CentOS 6 z zainstalowanymi OpenJDK 1.6 i 1.7.
Daniel Serodio
@DanielSerodio Correct. Wyraźnie opisałem „Pobierz i zainstaluj Java JDK z Oracle”, a potem już istnieje.
Niels Basjes
2

Chcesz ustawić JAVA_HOME jako lokalizację główną JDK lub JRE, na przykład:

export JAVA_HOME=/usr/java/jdk1.3

Jeśli JDK (zestaw programistyczny) jest zainstalowany, prawdopodobnie chcesz, aby wskazywał na to, w przeciwnym razie użyj ścieżki JRE (Java Runtime Environment). Następnie możesz ustawić zmienną środowiskową $ PATH, aby zawierała również katalog bin:

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

Jeśli używasz tomcat, może być konieczne ustawienie CATALINA_HOME dla użytkownika tomcat.

export CATALINA_HOME=/path/to/tomcat

Aby ustawić to dla systemu, chcesz edytować swój plik / etc / profile lub dodać plik .sh w folderze /etc/profile.d. Dla konkretnego użytkownika możesz umieścić go w plikach ~ / .profile użytkownika lub ~ / .bash_profile.

Kyle Brandt
źródło
Zastanawiam się, czy istnieje dobry powód, dla którego instalacja tego nie robi, jeśli jest uruchamiana jako superużytkownik, zawsze uważam to za irytujące ...
Kyle Brandt
2

Poniżej zawsze działa dla mnie idealnie:

[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

Oznacza to, że mogę ustawić JAVA_HOME jako /usr/java/jdk1.6.0_31

prashant
źródło
1

Rozważyłem problem polegający na zmianie wersji Java używanej z:

alternatives --config java

W takim razie każde zakodowane JAVA_HOMEna stałe zmieni się (przynajmniej tak będzie w Centos 6.6, na które obecnie patrzę). To znaczy nie ma /usr/java.

Nie wydaje się to najlepszym sposobem (otwartym na porażkę), ale w ciągu 10 minut, które spędziłem na tym, wydaje się najlepsze.

W /etc/bashrczmodyfikowałem ustawienie, JAVA_HOMEaby było:

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

Musisz zrobić coś podobnego na MacOSX, ale bez tego wszystkiego grepi sedprzeanalizować wynik. Z pewnością alternativesoferuje podobnie łatwiejsze rozwiązanie.

W każdym razie mam nadzieję, że pomogłem.


Aktualizacja

Nie, to by było JRE_HOME. JDK / SDK nie okazuje się tak oczywiste (będę szukał dalej).

alternativesWydaje się być tylko o JRE domyślnie. Opieram się na odpowiedzi @Niels lub po prostu instaluję Javę yumi ustawiam JAVA_HOME na ten (sztuczka polega na tym, że znalazłem, gdzie to zostało zainstalowane!).

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

Zauważyłem, że java_1.8.0jest dowiązaniem symbolicznym /etc/alternatives/java_sdk_1.8.0i dlatego ustawiłem $ JAVA_HOME na /usr/lib/jvm/java_1.8.0. W /etc/bashrc.

HankCa
źródło
0

To dziwne, cały sens posiadania zmiennej środowiskowej JAVE_HOME polega na tym, że nie trzeba określać ścieżki do każdego programu, można ją uzyskać, szukając tej zmiennej.

Tak czy inaczej, poprawnym sposobem znalezienia zmiennej środowiskowej dla JAVA_HOME jest użycie echa:

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

Uruchomienie tego polecenia wyświetli ścieżkę bez względu na wersję, z której korzystasz, z wiersza polecenia.

Dave Drager
źródło
2
Zmienna nie została ustawiona.
Rory,
0

Odp .: Centos7, patrz plik /etc/java/java.conf.

w nim JAVA_HOME ma znajdować się w następującym katalogu: / usr / lib / jvm / java

sprawdziłem, to jest poprawna wersja jdk załadowałem przez yum, a więc ...

moja env nie ma domyślnie ustawionej JAVA_HOME, dlatego ustawiłem ją w .bash_profile

theRiley
źródło
0

Odkryłem, że menedżer pakietów może umieszczać w różnych lokalizacjach, więc przy użyciu których (musisz jawnie zainstalować to, jeśli używasz kontenera), poniższe są nieco mniej kruche

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

lub dla JRE

javaExec=$(which java)
javaBin=$(dirname $(readlink -f $javaExec))
javaHome=${javaBin%/*}
export JRE_HOME=$javaHome
Jules Clements
źródło