Przełączaj się między wieloma wersjami Java

65

Podczas instalowania Androida Studio na Ubuntu 14.04 pojawia się komunikat, że moja wersja Java ( javac 1.7.0_79) powoduje problemy. Znalazłem rozwiązanie, w jaki sposób zainstalować nowszą wersję Oracle Java:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Obawiam się jednak, że może to zastąpić moją istniejącą open-jdkwersję Java. Ponieważ nie wiem, który z moich programów zależy od Javy, obawiam się, że może to spowodować awarię innych programów.

Czy istnieje sposób, aby upewnić się, apt-getże nie zastąpi mojej poprzedniej wersji Java? Zasadniczo chciałbym zainstalować oba i móc przełączać się między nimi ręcznie, w zależności od potrzebnej wersji.

mcExchange
źródło

Odpowiedzi:

83

Apt-get nie zastąpi istniejących wersji Java.

Aby przełączać się między zainstalowanymi wersjami Java, użyj update-java-alternativespolecenia.

Wyświetl wszystkie wersje Java:

update-java-alternatives --list

Ustaw wersję Java jako domyślną (wymaga uprawnień roota):

sudo update-java-alternatives --set /path/to/java/version

... gdzie /path/to/java/versionjest jeden z tych wymienionych przez poprzednie polecenie (np /usr/lib/jvm/java-7-openjdk-amd64.).


Dodatkowe informacje:

update-java-alternativesJest to narzędzie, które wykorzystuje wygoda Debiana alternatywy systemowe ( update-alternatives), aby ustawić kilka linków do określonej wersji Java (na przykład java, javac...).

danzel
źródło
1
Dla mnie spowodowało to, że java -version było java8, ale JAVA_HOME wciąż było ustawione na 7 :(
Nenotlep
tq to również rozwiązuje mój problem. @Nototlep to, co zrobiłem, to ręczna edycja zmiennej środowiskowej w .bashrc lub / etc / environment
nuttynibbles
update-java-alternativesnie było dla mnie dostępne. Właśnie zastąpiłem to polecenie update-alternatives java.
nofinator
@nofinator, który wpływa tylko na javaplik wykonywalny. Z jakiej wersji Ubuntu korzystasz?
danzel
1
@Nenotlep w celu zmiany JAVA_HOMEnależy uruchomić następującą komendę: source /etc/environment
Jan
48

Posługiwać się

sudo update-alternatives --config java

która zawiera listę wszystkich zainstalowanych wersji z zaznaczoną aktualnie aktywną i zapewnia okno dialogowe do przełączania:

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

Posługiwać się

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

ustawić $JAVA_HOMEz bieżącej aktywnej wersji

muet
źródło
Jak zauważył @danzel przy przyjętej odpowiedzi, wpływa to tylko na javaplik wykonywalny, a nie na inne części konfiguracji. Użyj, update-java-alternativesjeśli jest dostępna.
Premek Brada
4

Na podstawie odpowiedzi z @muet stwierdziłem, że działa to płynnie:

Dodaj to do ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Dodaj do aliasów:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Następnie możesz przełączać się w obrębie tej samej powłoki, używając tylko: useJava7lubuseJava8

brianjohnsen
źródło
aby aliasy stały się trwałe, można je umieścić w ~ / .bashrc, więcej informacji tutaj askubuntu.com/questions/17536/...
Konstantin Zyubin
E: Nie można znaleźć pakietu oracle-java7-set-default
Prakash Pandey
SDKMAN jest niewątpliwie najłatwiejszym sposobem instalowania, używania i przełączania między różnymi wersjami Java. Zobacz tutaj: sdkman.io/usage.html
brianjohnsen
ostatnio natknąłem się na inne polecenie, aby ustawić JAVA_HOME, ale jeszcze do wypróbowania .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck
3

Konfigurowanie Java

Możesz skonfigurować, która wersja jest domyślna do użytku w wierszu poleceń, używając update-alternatives, który zarządza, które dowiązania symboliczne są używane dla różnych poleceń.

sudo update-alternatives --config java

Dane wyjściowe będą wyglądały mniej więcej tak:

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Możesz teraz wybrać numer, który będzie używany jako domyślny. Można to również zrobić w przypadku innych poleceń Java, takich jak kompilator ( javac), generator dokumentacji ( javadoc), narzędzie do podpisywania JAR ( jarsigner) i inne. Możesz użyć następującego polecenia, wypełniając polecenie, które chcesz dostosować.

sudo update-alternatives --config command

Ustawianie JAVA_HOMEzmiennej środowiskowej

Wiele programów, takich jak serwery Java, używa zmiennej środowiskowej JAVA_HOME do określania lokalizacji instalacji Java.

Skopiuj ścieżkę z preferowanej instalacji, a następnie otwórz środowisko / etc / za pomocą Sublime Text lub ulubionego edytora tekstu.

sudo subl /etc/environment

Na końcu tego pliku dodaj następujący wiersz, pamiętając o zastąpieniu podświetlonej ścieżki własną skopiowaną ścieżką.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Zapisz i zamknij plik i załaduj go: source /etc/environment.
Teraz możesz sprawdzić, czy zmienna została ustawiona, wykonując następujące polecenia: echo $JAVA_HOME. Zwróci ścieżkę, którą właśnie ustawiłeś.

naXa
źródło