Jak ustawić JAVA_HOME w Linuksie dla wszystkich użytkowników

185

Jestem nowy w systemie Linux i wydaje się, że jest za dużo folderów Java.

java -version daje mi:

  • wersja java „1.7.0_55”
  • Środowisko wykonawcze OpenJDK (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • 64-bitowa maszyna wirtualna serwera OpenJDK (kompilacja 24.51-b03, tryb mieszany)

Kiedy próbuję zbudować projekt Maven, pojawia się błąd:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Czy mógłbyś mi powiedzieć, które pliki muszę zmodyfikować dla użytkownika root, a nie dla użytkownika root i gdzie dokładnie znajduje się java?

Bosco
źródło

Odpowiedzi:

353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Dodaj sudo na początku, jeśli jesteś zalogowany jako nieuprzywilejowany użytkownik, tj. sudo vim

  3. Naciśnij „i”, aby przejść do trybu wstawiania
  4. Dodaj:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. wyloguj się i zaloguj ponownie, uruchom ponownie lub użyj, source /etc/profileaby natychmiast zastosować zmiany w bieżącej powłoce
Ten Dave Guy
źródło
29
nie zapomnij usunąć podwójnych cudzysłowów i odtworzyć je z klawiatury, ponieważ tylko kopiowanie i wklejanie może powodować problemy.
Sunil Kumar
12
@rbaleksandar, od których zależą niektóre aplikacje JAVA_HOME, nie zaszkodzi też ich skonfigurowaniu.
rafian
2
IntelliJ jest właśnie taką aplikacją - i to nie drugorzędną.
Pete
12
Musisz biec, source /etc/profileaby zmiany zaczęły obowiązywać natychmiast!
Mohamed Taher Alrefaie
1
To wskazało mi właściwy kierunek. Właściwie /etc/profile.d/jdk.shw moim systemie krążyła nieświeża .
Hermann
109

Wszystkim użytkownikom zalecałbym umieszczenie następującego wiersza /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

Będzie to aktualizować się dynamicznie i dobrze współpracuje z systemem alternatyw . Pamiętaj jednak, że aktualizacja odbędzie się tylko w nowej powłoce logowania.

Eero Aaltonen
źródło
10
aby zastosować się do zwykłego JRE (nawet bezgłowego) użycia export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")zamiast tego - zauważ, że używam po prostu java, a niejavac
Roman Kruglov
@occulta Przynajmniej Maven oczekuje, że JAVA_HOME wskaże JDK i użyje go do zlokalizowania kompilatora java.
Eero Aaltonen
1
Głosuj za readlinkrozwiązaniem kompatybilnym z aktualizacją / aktualizacją, nawet jeśli jest to wątek sprzed 5 lat. Zalecam tylko nie edytować / etc / profile, ale umieścić eksport w niestandardowym pliku, np. /etc/profile.d/java_environment.shMoże trzeba chmod +x java_environment.shi ponownie uruchomić.
ChristophS,
Idealny. Lepsze niż moje niezgrabne dirnamerozwiązanie. Jeśli jesteś podobny do mnie i chcesz zrozumieć, co się tutaj dzieje, jest to proste zastąpienie pasującego tekstu z danych wejściowych pustym ciągiem. Znakiem „domyślnym” dla zastąpień jest znak /, ale jeśli jesteś konsekwentny, możesz go zastąpić /dowolnym. W tym przypadku są to dwukropki, których używamy /do separatorów ścieżek.
Ungeheuer
35

Możesz użyć / etc / profile lub lepiej pliku takiego jak /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Musisz pamiętać, że ten plik jest ładowany tylko z nowymi powłokami logowania. Więc po bash -l lub nowej sesji gnome i że nie zmienia się z nowymi wersjami Javy.

flob
źródło
1
przynajmniej w moim systemie Linux (raspbian) / etc / profile będą zaopatrywać się /etc/profile.d/*.shwięc plik musi się nazywać jdk_home.shtak robi pozyskiwane
Hilikus
Dzięki @Hilikus :-) Odpowiednio to zmieniłem.
flob
2
Dziękuję Ci. zrobiłem mieszankę odpowiedzi twojej i @ Eero na najlepsze z obu światów;)
Hilikus.
1
To najlepsza odpowiedź
Jacob
/etc/profile.d/jdk_home.shjest o wiele bardziej przejrzystą odpowiedzią, przynajmniej w przypadku Ubuntu , która /etc/profilejest już pełna logiki. Nie wydawało się rozsądne, aby dodać do tego więcej ...
Ng Sek Long
30

Żadna z pozostałych odpowiedzi nie „przyklejała się” do mnie w RHEL 7, nawet ustawianie JAVA_HOMEi PATHbezpośrednio w /etc/profilelub ~/.bash_profilenie działały. Za każdym razem, gdy próbowałem sprawdzić, czy JAVA_HOMEzostało ustawione, wyświetlało się puste:

$ echo $JAVA_HOME
    (<-- no output)

Musiałem założyć skrypt w /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Początkowo zaniedbałem pierwszą linię (the #!/bin/sh) i bez niej nie zadziała.

Teraz działa:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/
Kyle Falconer
źródło
Miałem to samo doświadczenie z RHEL 7. Usunąłem eksport z ~ / .bash_profile i zastosowałem to podejście.
xpagesbeast
#! / bin / sh nie jest wymagane w twoim jdk_home.sh. po zakończeniu konfiguracji wyloguj się i zaloguj ponownie
kuhajeyan
12

Bardzo łatwo jest ustawić ścieżkę w Linuksie. Wykonaj następujące czynności:

Step-1 Otwórz terminal i wpisz sudo gedit .bashrc

Step-2 Poprosi Cię o hasło. Po wpisaniu hasła otworzy plik bash. Następnie przejdź do końca i wpisz poniżej

krok 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

krok-4 Następnie zapisz plik i wyjdź z pliku

Powyższe dotyczy jednego użytkownika. W przypadku wszystkich użytkowników musisz wykonać poniższe kroki

Krok 1 gedit /etc/profile

Krok 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Krok 3 export PATH=$PATH:$JAVA_HOME/bin

Mam nadzieję że to pomoże. Dzięki!

PyDevSRS
źródło
2
ta odpowiedź ustawia ją tylko dla bieżącego użytkownika.
Manuel Manhart
Dziękuję @ickyrr
PyDevSRS,
7

Robienie tego, co robi Oracle (jako były pracownik Sun nie mogę się do tego przyzwyczaić)

ln -s latestJavaRelease / usr / java / default
Gdzie latestJavaRelease to wersja, której chcesz użyć

następnie wyeksportuj JAVA_HOME = / usr / java / default

Steve S.
źródło
6

Odpowiedź podana w poprzednich postach jest ważna. Ale żadna odpowiedź nie jest kompletna w odniesieniu do:

  1. Zmiana / etc / profile nie jest zalecana tylko z powodu (jak podano w / etc / profile):
  • NIE jest dobrym pomysłem zmienianie tego pliku, chyba że wiesz, co robisz. Znacznie lepiej jest utworzyć skrypt powłoki custom.sh w /etc/profile.d/, aby wprowadzić niestandardowe zmiany w środowisku, ponieważ zapobiegnie to konieczności scalania w przyszłych aktualizacjach. *
  1. Jak wspomniano powyżej, utwórz plik /etc/profile.d/custom.sh dla niestandardowych zmian.

  2. Teraz, aby zawsze być na bieżąco z instalowanymi nowszymi wersjami Javy, nigdy nie podawaj ścieżki bezwzględnej, zamiast tego użyj:

#if tworzy jdk jako dom java

eksportuj JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

LUB

#if czyniąc jre jako dom java

eksportuj JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. I pamiętaj, aby mieć #! / bin / bash w pliku custom.sh
alok ailawadi
źródło
4

Skopiuj zainstalowaną ścieżkę do pliku bin

YOUR PATH

otwórz terminal i edytuj plik środowiska wpisując następujące polecenie,

sudo nano /etc/environment

W tym pliku dodaj następujący wiersz (zastępując YOUR_PATHwłaśnie skopiowaną ścieżką):

JAVA_HOME="YOUR_PATH"

To powinno wystarczyć do ustawienia zmiennej środowiskowej. Teraz przeładuj ten plik:

source /etc/environment

teraz przetestuj to, wykonując:

echo $JAVA_HOME
VirangaMahesh
źródło
3
olny wpływa na obecną sesję na terminalu
Fatih Türker
@ FatihTürker Zrestartuj swój komputer
Jack Giffin
Dla mnie używającego jdk11 TWOJA_ŚCIEŻKA to/usr/lib/jvm/default-java/
Jack Giffin
Ścieżka JAVA_HOME jest ustawiona, ale nie działa. tj. java nie działa. Nawet po ponownym uruchomieniu
Ssenyonjo
2

W Linuksie dodaję tę linię do mojego ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
Emanuel Oliveira
źródło
2
Wydaje się, że jest to potencjalnie poprawna odpowiedź, ale czy możesz wyjaśnić, dlaczego to działa, tj. Co robi i na czym polega problem PO? Mówisz także „w systemie Linux”, ale istnieje wiele różnych dystrybucji Linuksa i może nie działać dla wszystkich z nich. Dodaj, dla której dystrybucji to działa.
Buurman
2

Krok 1 - sprawdź aktualną wersję Java przez „echo $ JAVA_HOME”

Krok 2 - vim / etc / profile

Krok 3 - Na końcu pliku znajdziesz eksport JAVA_HOME, musimy tutaj podać nową ścieżkę, upewnij się, że nie jest względna.

Krok 4 - Zapisz i wyjdź: wq

Krok 5 - „source / etc / profile /”, spowoduje to wykonanie zmiany

Krok 6 - Ponownie wykonaj echo $ JAVA_HOME - zmiana zostanie odzwierciedlona.

swapnil shashank
źródło
2

1 ... Używając skrótu Ctlr+ Alt+, Taby otworzyć terminal

2 ... Wykonaj poniższe polecenie:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (zalecane) Uruchom ponownie maszynę wirtualną / komputer. Możesz użyć, source /etc/sourcejeśli nie chcesz ponownie uruchamiać komputera

4 ... Używając skrótu Ctlr+ Alt+, Taby otworzyć terminal

5 ... Zweryfikowana rata JAVA_HOME z

echo $JAVA_HOME

Jednowierszowa kopia flob , uznanie dla nich

Ng Sek Long
źródło
2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME
Dashrath Mundkar
źródło
1

Prawdopodobnie dobrym pomysłem jest pozyskanie dowolnego edytowanego profilu, aby zapisać, używając nowego loginu.

albo: źródło / etc / lub. /itp/

Gdzie jest dowolny edytowany profil.

Bryant Bernstein
źródło
1

Podczas gdy jesteśmy już gotowi do ustawienia JAVA_HOME, pozwól mi podzielić się niektórymi zaletami ustawienia JAVA_HOME lub dowolnej innej zmiennej środowiskowej:

1) Aktualizacja JDK jest łatwa bez wpływu na uruchamianie aplikacji i plik konfiguracyjny, który wskazuje na JAVA_HOME. wystarczy pobrać nową wersję i upewnić się, że JAVA_HOME wskazuje na nową wersję Java. Jest to najlepsza zaleta korzystania ze zmiennej środowiskowej lub linków.

2) Zmienna JAVA_HOME jest krótka i zwięzła zamiast pełnej ścieżki do katalogu instalacyjnego JDK.

3) Zmienna JAVA_HOME jest niezależna od platformy, tzn. Jeśli twój skrypt startowy używa JAVA_HOME to może działać na Windows i UNIX bez żadnych modyfikacji, wystarczy ustawić JAVA_HOME na odpowiednim systemie operacyjnym.

Czytaj więcej: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

Gość
źródło
1

To bardzo prosty skrypt rozwiązujący problem

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

A do testów:

echo $JAVA_HOME
Dylan Breugne
źródło
1

Publikuję jako odpowiedź, ponieważ nie mam przywileju komentowania.

Zwróć uwagę : postępuj zgodnie z zaakceptowaną odpowiedzią zamieszczoną przez „That Dave Guy”.

Po ustawieniu zmiennych upewnij się, że ustawiłeś odpowiednie uprawnienia do katalogu java, w którym jest zainstalowany.

chmod -R 755 /usr/java
Van Peer
źródło
1

Wszystkie kroki operacyjne (znalezienie java, katalogu nadrzędnego, edycja pliku, ...) jedno rozwiązanie

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Wynik:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Wyjaśnienie:

1) Podzielmy całą komendę na części

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Znajdź ścieżkę java z polecenia java

# $(which java)
"/usr/bin/java"

3) Uzyskaj ścieżkę względną ze ścieżki symbolicznej

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Uzyskaj ścieżkę rodzicielską /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Uzyskaj ścieżkę rodzicielską /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
ahmet
źródło
0

Użyj SDKMAN sdkman.io aby przełączyć btw. twój sdk's.

Ustawia JAVA_HOME dla Ciebie.

Stefan Höltker
źródło
0

otwórz kafka-run-class.sh z sudo do pisania

możesz znaleźć kafka-run-class.sh w swoim folderze kafka : kafka / bin / kafka-run-class.sh

sprawdź te linie

wprowadź opis obrazu tutaj

Zmodyfikuj zmienną JAVA w innej części, aby wskazywała na plik wykonywalny Java w twoim java / bin. jak JAVA = "$ JAVA_HOME / java"

Ashish Verma
źródło
0

W / etc / profile, jeśli to otworzysz, dowiesz się, że NIE JEST zalecane zapisywanie w tym pliku. Zamiast tego utwórz skrypt swoich poleceń (załóżmy, że test.sh) przejdź do folderu /etc/profile.d i umieść tam test.sh. Za każdym razem, gdy uruchomisz ponownie instancję, zostanie ona automatycznie wywołana przez / etc / profile.

Noha
źródło
-1

Używam linii:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

do mojego ~ / .profile, tak aby podczas logowania używał podstawy domyślnego katalogu java. To jest dla basha.

darkhipo
źródło