Przełączanie między Javą 7 a 8 w OS X

25

Zainstalowałem Java-8. Teraz chciałem domyślnie wrócić do Java-7, więc wpisuję ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

Ale wciąż widzę ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

To działa ...

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home

Ale chciałbym bardziej trwałe rozwiązanie.

Czy ktoś widzi, co robię źle?

Jackie
źródło

Odpowiedzi:

50

Łatwo przełączaj wersje

  1. Zainstaluj wersje 1.6, 1.7, 1.8 w dowolnej kolejności. Uwaga: uważam, że ostatni zainstalowany decyduje, który zostanie użyty do wtyczek do przeglądarek, nie zamierzam zmieniać tych poniżej.

  2. Następnie dodaj do ~/.bashrclub ~/.bash_profilelub gdziekolwiek:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. Sprawdź zmianę za pomocą java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    java version "1.6.0_65"
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

Oczywiście zmiana dotyczy tylko czasu trwania powłoki. Ale teraz możesz zobaczyć, gdzie możesz to ustawić globalnie.

nkadwa
źródło
2
Jeden problem: JDK7 odmawia instalacji, jeśli masz już JDK8. Wskazuje adres URL na oracle.com, aby uzyskać więcej informacji, które dają 404. I, oczywiście, instrukcje odinstalowania JDK8 w ogóle nie działają, więc teraz jestem w zasadzie zagubiony.
Eric W
1
wystarczy użyć jenv jenv.be
madzohan
9

Możesz użyć jEnv ( http://www.jenv.be/ ), który jest „narzędziem wiersza poleceń, które pomaga zapomnieć, jak ustawić zmienną środowiskową JAVA_HOME, aby przełączać się między różnymi wersjami JDK” (pobrane ze strony głównej projektu ).

Jeśli znasz Ruby, JEnv przypomina używanie RVM lub rbenv. Pomaga obsłużyć kilka różnych JDK zainstalowanych na twoim komputerze bez konieczności pisania własnego skryptu, aby przełączyć się z jednego JDK na inny. Możesz zmienić bieżącą wersję Java na przykład na podstawie bieżącego katalogu lub pliku konfiguracyjnego.

Pietro Di Bello
źródło
Czy możesz to rozwinąć? To wygląda jak komentarz, a nie odpowiedź.
Austin T Francuski
Jeśli znasz Ruby, to jak używanie RVM lub rbenv do zmiany bieżącej wersji Java na przykład na podstawie bieżącego katalogu lub pliku konfiguracyjnego. Jeśli przejdziesz na stronę główną JENV, znajdziesz dobry tutorial.
Pietro Di Bello
Ten post powinien być przeznaczony dla wszystkich, którzy szukają odpowiedzi, dlatego bardziej szczegółowe informacje w tym poście powinny zostać uznane za kompletną i dobrą odpowiedź.
Austin T French
Dodałem więcej informacji i nieco rozszerzyłem odpowiedź ... mam nadzieję, że teraz wygląda to lepiej. Dzięki za opinie.
Pietro Di Bello
4

Nie można przełączać się między wersjami Java. W dokumentacji widać:

Jednocześnie można zainstalować tylko jedno środowisko JRE. System nie zainstaluje środowiska JRE, które ma wersję niższą niż bieżąca. Jeśli chcesz zainstalować niższą wersję środowiska JRE, najpierw odinstaluj bieżącą wersję.

Jeśli chcesz wrócić do starszej wersji, musisz odinstalować Javę 8.

Christian Wörz
źródło
grrr dzięki, ale to nie pomaga mojej opinii na temat OSX.
Jackie
4
@Jackie: W rzeczywistości ma to niewiele wspólnego z OS X, ale więcej z Oracle. Kiedy Apple utrzymywało JDK dla OS X, przełączanie między aktywnymi wersjami Java było idealnie i łatwe. Obwiniaj Oracle za ich gównianego instalatora, a nie OS X.
Alessandro Vermeulen,
@AlessandroVermeulen z całym szacunkiem, to nie jest „instalator”, do diabła, szkoda, że ​​nie przyszedł z wersją preinstalowaną, taką jak moje pudełka z Linuksem. Następnie mógłbym go „zainstalować” tak, jak chciałem, z plikiem binarnym unix. Były też starsze wersje OSX, w których nawet trzeba było je uruchomić. IMHO to absolutnie konwencje stosowane w OSX, które powodują problem.
Jackie
4
Na moim komputerze jest poprawnie zainstalowanych wiele JDK, to wtyczka preferencji Oracles, która nie pozwala na zmianę z 1.8 na 1.7, z linii poleceń z pełną ścieżką, z której wszystkie działają z powodzeniem. / usr / libexec / java_home -V wyświetla je wszystkie - a okienko preferencji Java 7 umożliwiło wybór środowiska JRE Java 7
151019
0

Chcę uzupełnić odpowiedź @ nkadwa. Jego sugestia zadziałała, ale dopiero po zmianie dowiązania symbolicznego dla CurrentSDK. Oto zmodyfikowany kod:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
imdahmd
źródło