Jaka jest różnica między JAVA_HOME a alternatywami dla aktualizacji?

13

Próbowałem znaleźć najlepszy sposób, aby uruchomić środowisko Java Runtime OpenJDK jako domyślną Javę dla mojego pudełka Fedory i użyć Oracle JDK 6 dla rozwoju Androida, a mianowicie do uruchamiania Menedżera SDK Androida, Android Studio i Eclipse z pakietu Android.

Zainstalowałem Java Runtime OpenJDK z repozytorium Fedory, które ma alternatywne opcje instalacji w następujący sposób.

[donnie@fedora ~]$ alternatives --list | grep java
jre_openjdk             auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
jre_1.7.0               auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre
java                    auto    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64/jre/bin/java
libjavaplugin.so.x86_64 auto    /usr/lib64/IcedTeaPlugin.so

Zainstalowałem Oracle JDK 6 przy użyciu rpm dostarczonych przez Oracle.

Mógłbym sprawić, by pakiet Android i Studio korzystały z JAVA_HOME do uruchamiania pod Oracle JDK, pozostając przy tym .bashrc.

export JAVA_HOME=/usr/java/jdk1.6.0_45/
export PATH=$JAVA_HOME/bin:$PATH

Zauważyłem, że Chrome nadal korzysta z OpenJDK (ponieważ nadal muszę połączyć wtyczkę).

Jakie są różnice między JAVA_HOME a używaniem alternatyw?

Sudhir Khanger
źródło

Odpowiedzi:

11

Alternatywy

Alternatywy to narzędzie, które będzie zarządzać lokalizacjami zainstalowanego oprogramowania za pomocą łączy pod kontrolą tego alternativesnarzędzia.

Łączami tymi ostatecznie zarządza się zwykle za /etc/alternativespomocą łączy pośrednich utworzonych w katalogu w .$PATH/usr/bin

Przykład

$ ls -l /usr/bin/java
lrwxrwxrwx. 1 root root 22 Feb 24 17:36 /usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Feb 24 17:36 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.0.fc19.x86_64/jre/bin/java

$ JAVA_HOME

$JAVA_HOMEto miejsce, w którym można polecić oprogramowaniu przeglądanie za pomocą zmiennej środowiskowej. Dodanie go do $PATHzwykłego dodaje pliki wykonywalne obecne w $JAVA_HOME/bintwoim $PATH. Jest to czasem konieczne w przypadku niektórych aplikacji.

Oba mechanizmy są powiązane, ale mogą być używane razem lub niezależnie od siebie, tak naprawdę zależy od aplikacji Java, który mechanizm jest preferowany.

Co robię

Zwykle używam $JAVA_HOMEdo niektórych aplikacji GUI, ale ogólnie używam go tylko do instalacji serwerów, które wykorzystują na przykład Jetty, Tomcat lub JBOSS.

W przypadku tych instalacji nadal będę używać alternativesdo zarządzania instalacjami Java przed ustawieniem $JAVA_HOME. Lubię robić to w ten sposób, gdy potrzebuję wielu instalacji Javy.

Alternatywy pozwalają na to, aby niektóre narzędzia korzystały z jednej instalacji Java, podczas gdy inne narzędzia używają zupełnie innej.

Bibliografia

slm
źródło
Wadą jest to, że dzięki alternatywom mogę używać różnych komponentów Java. Na przykład, można ustawić Alternatywy javai javacz różnych pakietów JDK z drugiej strony JAVA_HOME=JAVALOCATIONprzypomina java, javaci javawsdo java, javaci javawsw JAVALOCATIONodpowiednio.
Sudhir Khanger,
Powodem, dla którego zadałem to pytanie, było to, w jaki sposób mogę używać OpenJDK jako domyślnego środowiska wykonawczego programów Java, aby Android Studio, Eclipse i SDK Manager korzystały z Oracle JDK. Mogę uruchomić te trzy programy pod Oracle JDK, mocno edytując ich skrypty startowe, które mogą ulec uszkodzeniu, jeśli zostaną zaktualizowane. Szukałem czegoś bardziej ogólnego, takiego jak coś STUDIO_JDK, co mogę dodać do, ~/.profilelub ~/.bashrcktóre jest używane przez Android Studio do pobierania JDK, ale myślę, że pakiet Androida (Eclipse i SDK Manager) tego nie uhonoruje.
Sudhir Khanger,
@donniezazen - tak STUDIO_JDKjest niestandardową rzeczą. Użyłbym alternatyw dla tych narzędzi i wybrałbym JAVA_HOMEścieżkę, pod /usr/binktórą zarządza alternatives. Po przeprowadzeniu aktualizacji alternativeswystarczy zmienić .
slm
Nie jestem pewien, co proponujesz. Wskaż alternativesi JAVA_HOMEpowiedz /usr/bin/java. Wygląda też na JAVA_HOMEprzesłonięcia alternatives.
Sudhir Khanger,
@donniezazen - tak, użyj alternatywnych metod do zarządzania instalacjami JAVA, a następnie użyj JAVA_HOME, wskazując na /usr/bin. Masz rację, JAVA_HOMEmożesz działać niezależnie od alternatives.
slm