Apa perbedaan antara JAVA_HOME dan pembaruan-alternatif?

12

Saya telah mencoba mencari cara terbaik untuk menjalankan OpenJDK Java Runtime sebagai Java default untuk kotak Fedora saya dan menggunakan Oracle JDK 6 untuk pengembangan Android yaitu untuk menjalankan Android SDK Manager, Android Studio dan Eclipse dari Android Bundle.

Saya menginstal OpenJDK Java Runtime dari repositori Fedora yang memiliki alternatif pengaturan sebagai berikut.

[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

Saya telah menginstal Oracle JDK 6 menggunakan rpm yang disediakan oleh Oracle.

Saya bisa membuat Android Bundle dan Studio menggunakan JAVA_HOME untuk berjalan di bawah Oracle JDK dengan tetap mengikuti di .bashrc.

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

Saya perhatikan bahwa Chrome masih menggunakan OpenJDK (karena saya masih perlu menautkan plugin).

Apa perbedaan antara JAVA_HOME dan menggunakan alternatif?

Sudhir Khanger
sumber

Jawaban:

11

Alternatif

Alternatif adalah alat yang akan mengelola lokasi perangkat lunak yang diinstal menggunakan tautan di bawah kendali alternativesalat.

Tautan ini pada akhirnya dikelola /etc/alternativesdengan tautan perantara yang dibuat di bawah direktori $PATH, biasanya /usr/bin.

Contoh

$ 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_HOMEDi sinilah perangkat lunak dapat diberitahu untuk melihat melalui penggunaan variabel lingkungan. Menambahkannya ke $PATHhanya menambahkan file executable $JAVA_HOME/binke Anda $PATH. Ini kadang-kadang diperlukan untuk aplikasi tertentu.

Kedua mekanisme tersebut saling terkait tetapi dapat digunakan bersama atau tidak tergantung satu sama lain, hal ini sangat tergantung pada aplikasi Java mana mekanisme yang lebih disukai.

Apa yang saya lakukan

Saya biasanya menggunakan $JAVA_HOMEuntuk beberapa aplikasi GUI, tetapi secara umum menggunakannya hanya untuk instalasi server yang menggunakan Jetty, Tomcat, atau JBOSS, misalnya.

Untuk instalasi ini saya masih akan menggunakan alternativesuntuk mengelola instalasi Java sebelum pengaturan $JAVA_HOME. Saya suka melakukannya dengan cara ini jika saya perlu menginstal banyak Java.

Alternatif tidak memungkinkan Anda untuk memiliki alat tertentu menggunakan satu instalasi Java sementara alat lainnya menggunakan yang sama sekali berbeda.

Referensi

slm
sumber
Hadiahnya adalah bahwa dengan alternatif saya dapat menggunakan berbagai komponen Java. Misalnya, Alternatif dapat mengatur javadan javacdari JDKs yang berbeda di sisi lain JAVA_HOME=JAVALOCATIONakan menunjuk java, javacdan javawsuntuk java, javacdan javawsdi JAVALOCATIONmasing-masing.
Sudhir Khanger
Alasan saya mengajukan pertanyaan ini adalah bagaimana saya bisa menggunakan OpenJDK sebagai Java Runtime default dan membuat Android Studio, Eclipse dan SDK Manager menggunakan Oracle JDK. Saya dapat menjalankan ketiga program di bawah Oracle JDK dengan mengedit skrip startup mereka yang mungkin rusak jika mereka diperbarui. Saya sedang mencari sesuatu yang lebih umum seperti STUDIO_JDK, yang dapat saya tambahkan ~/.profileatau ~/.bashrc, yang digunakan oleh Android Studio untuk mengambil JDK tapi saya pikir Bundel Android (Eclipse dan SDK Manager) tidak akan menghormatinya.
Sudhir Khanger
@donniezazen - yeah STUDIO_JDKadalah kebiasaan. Saya akan menggunakan alternatif untuk alat-alat itu dan mengatur JAVA_HOMEjalur /usr/binyang dikelola oleh alternatives. Ketika upgrade dilakukan, perubahan alternativesadalah semua yang diperlukan.
slm
Saya tidak yakin apa yang Anda usulkan. Arahkan keduanya alternativesdan JAVA_HOMEkatakan /usr/bin/java. Juga sepertinya JAVA_HOMEditimpa alternatives.
Sudhir Khanger
@donniezazen - ya gunakan alternatif untuk mengelola instalasi JAVA Anda dan kemudian gunakan JAVA_HOME, arahkan ke /usr/bin. Anda benar, JAVA_HOMEdapat beroperasi secara independen dari alternatives.
slm