Beralih di antara beberapa versi java

65

Saat memasang Android Studio di Ubuntu 14.04 saya mendapatkan pesan bahwa versi Java saya ( javac 1.7.0_79) menyebabkan masalah. Saya menemukan solusi untuk menginstal Java versi Oracle yang lebih baru:

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

Namun saya khawatir ini akan menimpa open-jdkversi Java saya yang ada . Karena saya tidak tahu program saya mana yang bergantung pada Java, saya khawatir ini bisa membuat crash program lain ini.

Apakah ada cara untuk memastikan apt-gettidak menimpa Java saya sebelumnya? Saya pada dasarnya ingin menginstal keduanya dan dapat beralih di antara mereka secara manual, tergantung pada versi apa yang saya butuhkan.

mcExchange
sumber

Jawaban:

83

Apt-get tidak akan menimpa versi java yang ada.

Untuk beralih di antara versi java yang diinstal, gunakan update-java-alternativesperintah.

Daftar semua versi java:

update-java-alternatives --list

Tetapkan versi java sebagai default (perlu izin root):

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

... di mana /path/to/java/versionadalah salah satu dari yang terdaftar oleh perintah sebelumnya (misalnya /usr/lib/jvm/java-7-openjdk-amd64).


Informasi tambahan:

update-java-alternativesadalah alat kenyamanan yang menggunakan Debian sistem alternatif ( update-alternatives) untuk mengatur banyak link ke versi java yang ditentukan (misalnya java, javac, ...).

danzel
sumber
1
Bagi saya ini menyebabkan java-versi menjadi java8, tetapi JAVA_HOME masih di set ke 7 :(
Nenotlep
tq ini menyelesaikan masalah saya juga. @Nenotlep apa yang saya lakukan adalah mengedit variabel lingkungan secara manual baik di .bashrc atau / etc / environment
nuttynibbles
update-java-alternativestidak tersedia untuk saya. Saya baru saja mengganti perintah itu dengan update-alternatives java.
nofinator
@nofinator yang hanya memengaruhi javaexecutable. Versi Ubuntu mana yang Anda gunakan?
danzel
1
@Nenotlep untuk mengubah JAVA_HOMEAnda harus menjalankan perintah berikut: source /etc/environment
janb
48

Menggunakan

sudo update-alternatives --config java

yang mencantumkan semua versi yang diinstal dengan aktif saat ini ditandai dan menyediakan dialog untuk beralih:

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: 

Menggunakan

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

untuk mengatur $JAVA_HOMEdari versi aktif saat ini

muet
sumber
Seperti dicatat oleh @danzel pada jawaban yang diterima, ini hanya mempengaruhi yang javadapat dieksekusi, bukan bagian lain dari konfigurasi. Gunakan update-java-alternativesjika tersedia.
Premek Brada
5

Berdasarkan jawaban dari @muet, saya menemukan ini berfungsi dengan mulus:

Tambahkan ini ke ~/.bashrc:

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

Tambahkan ke alias:

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'

Kemudian Anda dapat beralih di dalam shell yang sama hanya menggunakan: useJava7atauuseJava8

brianjohnsen
sumber
untuk membuat alias permanen, Anda dapat memasukkannya ke ~ / .bashrc, info lebih lanjut di sini askubuntu.com/questions/17536/…
Konstantin Zyubin
E: Tidak dapat menemukan paket oracle-java7-set-default
Prakash Pandey
Cara paling mudah untuk menginstal, menggunakan, dan beralih di antara berbagai versi java adalah menggunakan SDKMAN! Lihat di sini: sdkman.io/usage.html
brianjohnsen
baru-baru ini menemukan perintah lain untuk mengatur JAVA_HOME, belum mencoba .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck
3

Konfigurasi Java

Anda dapat mengonfigurasi versi mana yang merupakan default untuk digunakan dalam baris perintah dengan menggunakan update-alternatives, yang mengelola tautan simbolik mana yang digunakan untuk berbagai perintah.

sudo update-alternatives --config java

Output akan terlihat seperti berikut ini.

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:

Anda sekarang dapat memilih nomor yang akan digunakan sebagai default. Ini juga dapat dilakukan untuk perintah Java lainnya, seperti compiler ( javac), generator dokumentasi ( javadoc), alat penandatanganan JAR ( jarsigner), dan banyak lagi. Anda dapat menggunakan perintah berikut, mengisi perintah yang ingin Anda sesuaikan.

sudo update-alternatives --config command

Mengatur JAVA_HOMEVariabel Lingkungan

Banyak program, seperti server Java, menggunakan variabel lingkungan JAVA_HOME untuk menentukan lokasi instalasi Java.

Salin jalur dari instalasi pilihan Anda dan kemudian buka / etc / environment menggunakan Sublime Text atau editor teks favorit Anda.

sudo subl /etc/environment

Di akhir file ini, tambahkan baris berikut, pastikan untuk mengganti jalur yang disorot dengan jalur yang Anda salin sendiri.

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

Menyimpan dan keluar file, dan reload: source /etc/environment.
Sekarang Anda dapat menguji apakah variabel lingkungan telah ditetapkan dengan menjalankan perintah berikut: echo $JAVA_HOME. Ini akan mengembalikan jalur yang baru saja Anda atur.

naXa
sumber