Jak ustalić JAVA_HOME na Debian / Ubuntu?

95

W systemie Ubuntu możliwe jest posiadanie wielu maszyn JVM jednocześnie. Domyślny jest wybierany za pomocą update-alternatives. Ale to nie ustawia JAVA_HOMEzmiennej środowiskowej z powodu polityki Debiana .

Piszę skrypt uruchamiający (bash), który uruchamia aplikację Java. Ta aplikacja Java wymaga JAVA_HOMEzmiennej środowiskowej. Jak więc uzyskać ścieżkę do JVM, która jest obecnie wybrana update-alternatives?

Witek
źródło

Odpowiedzi:

137

W przypadku środowiska JRE coś takiego powinno wystarczyć:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
danadam
źródło
17
Potrzebowałem domu JDK zamiast JRE, ale dostałem to za pomocą: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Dziękujemy!
Witek
kiedy spróbowałem polecenia echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), wynik był /usr/lib/jvm/java-7-oracle/jre/i nie/usr/lib/jvm/java-7-oracle/
Sumit Ramteke
Kod podany w rsaddey działa poprawnie
Sumit Ramteke
43

Rozwiązanie danadam można łatwo zaadaptować do pobierania ścieżki JDK (tj. nie JRE) zgodnie z wymaganiami:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Poszukuje kompilatora Java javac (zamiast java) zawartego w JDK (ale nie JRE).
  • Nie ma końcowego / (usunięty przez sed s: / bin ... zamiast s: bin ...)
rsaddey
źródło
12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

W .bashrcbył przydatny dla mnie.

David
źródło
9

Mówisz, że to polecenie nic dla ciebie nie robi?

sudo update-alternatives --config java 
djangofan
źródło
2
Czy to powinno ustawić JAVA_HOME? Odkryłem, że update-java-alternatives to lepszy sposób na aktualizację Javy, ponieważ update-alternatives nie aktualizuje wszystkich alternatyw związanych z Javą. Zobacz askubuntu.com/questions/141791
James McMahon
To prawda, ale natknąłem się na instancje Linuksa, które miały alternatywy aktualizacji, ale nie miały zainstalowanej alternatywy aktualizacji java.
djangofan
3

Zainstalowałem java z

sudo apt-get install openjdk-7-jre-headless

a następnie, aby znaleźć lokalizację

ls -al /etc/alternatives/java
prule
źródło
2

Jako rozszerzenie odpowiedzi danadams:

Przede wszystkim zainstaluj 2. środowisko Java JRE jako 3. opcję Java z priorytetem „3”:

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Następnie możesz je wymienić:

update-alternatives --list java

Możesz ręcznie ustawić alternatywę, używając tego:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Następnie skrypt może ustawić go w locie, w następujący sposób:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

To lepiej ilustruje, co robi polecenie „sed”. Chociaż nadal musisz ustawić linki dla javaw i javac itp., Każde wykonane osobno.

djangofan
źródło
1

Jakiś czas temu stworzyłem tutorial na forum Ubuntu, w jaki sposób zainstalować najnowszą wersję JRE / JDK ze strony Java. Obejmuje także sposób włączania go w całym systemie, dodając lokalizację JRE / JDK do zmiennej PATH. Jeśli chcesz, możesz także dodać skrypt JAVA_HOME, wymieniony na końcu tematu.

Sprawdź to: http://ubuntuforums.org/showthread.php?t=1437100

EarthMind
źródło
1

Jeśli java jest skonfigurowana update-alternativeslub została dodana do zmiennej PATH ręcznie, to nie "/usr/bin/java"jest konieczne wpisywanie na stałe . Korzystam z tego rozwiązania w moim .bashrc:

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

Freddy
źródło