Beberapa lingkungan Java pada mesin Linux yang sama

9

Apa cara paling efisien untuk menginstal beberapa versi Java JDK bersamaan pada mesin Linux yang sama?

Saya perlu Java5 sementara Ubuntu 9,10 Karmic saya saat ini hadir dengan Java6.

Saya tahu saya bisa mengatur VM untuk ini tetapi saya mencari alternatif.

jldupont
sumber

Jawaban:

5

Jika Anda mengunduh biner linux dari Sun, Anda dapat menginstalnya di direktori apa pun yang Anda suka. Kemudian hanya referensi lib itu dalam kode Anda, dan Anda siap melakukannya.

Dengan penginstal biner, ia akan membuat subdirektori bernama sendiri (misalnya dalam contoh Anda, /usr/java/jdk1.5.0_), sehingga Anda dapat mengunduh sebanyak yang Anda inginkan, dan mereka akan berbaris dengan nama yang tepat sub-drectories.

Biner java utama tinggal di / usr / bin, jadi jika Anda ingin menggantinya ke titik di mana ketika Anda mengetik "java" itu mengakses java Anda, dan bukan yang itu, Anda hanya memindahkan yang lama dari / usr / bin , dan tautkan yang baru di sana. Mengetik which javaakan memberi tahu Anda apa java default pada sistem Anda.

@ jldupont: Ketika saya memikirkan menginstal bersamaan, saya memikirkan beberapa versi diinstal pada mesin yang sama, yang metode saya benar-benar akan memberi Anda. Saya memiliki sekitar 12 versi java yang diinstal pada kotak produksi saya untuk menangani hand-me-downs dari perusahaan yang belum diperbarui.

Namun ketika Anda mengetik "java" Anda hanya akan mendapatkan satu versi java, karena itulah yang ada di '/usr/bin'... Anda harus mengetikkan sesuatu seperti' /usr/java/jdk1.5.1/ bin / java 'untuk mendapatkan biner java tertentu yang bukan sistem default.

Satanicpuppy
sumber
Terima kasih tetapi saya perlu menginstal secara bersamaan . Bagaimana aku melakukan itu?
jldupont
Terima kasih. Saya sekarang telah menginstal JDK5 di / opt dan menulis sendiri bash script untuk mengatur variabel lingkungan ... sepertinya sudah berfungsi. Saya pikir ini akan lebih menyakitkan dari ini!
jldupont
@ jldupont: Sebenarnya itu salah satu hal yang saya sukai dari linux ... Karena tidak ada registri yang menghalangi, Anda dapat menginstal hal yang sama ratusan kali, dan itu bukan masalah selama Anda memastikan untuk tidak menulis file-file umum secara berlebihan. Saya tahu banyak orang yang menjalankan (misalnya) beberapa versi Apache yang berbeda. Saya sendiri cenderung menjalankan beberapa versi Perl dan Java.
Satanicpuppy
1

Cukup unduh dan jalankan file .bin dari oracle yang kemudian mengekstrak dirinya ke dalam folder. Pindahkan folder ini (mis. jdk1.6.0_32) Ke / usr / lib / jvm dan kemudian skrip yang setjavasaya gunakan untuk mengubah versi java. Namun, karena exportpernyataan itu Anda harus tetap di terminal yang sama. Juga beberapa alat jvm kecil mungkin tidak diatur tetapi saya kira itu harus bekerja dalam banyak kasus. Saya juga seorang shell noob jadi tolong perbaiki saya jika ada kemungkinan yang lebih baik :-) Kode untuk saya adalah:

#!/bin/bash
# shouldnt be used in a loop, else the path may become too long

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

case "$1" in
  6)
    echo "Setting Java version 6"
    export PATH=/usr/lib/jvm/jdk1.6.0_32/bin:$PATH
    export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_32
    sudo rm /usr/bin/java
    sudo rm /usr/bin/javac
    sudo rm /usr/bin/javadoc
    sudo rm /usr/bin/javah
    sudo rm /usr/bin/javap
    sudo rm /usr/bin/javaws
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/java /usr/bin/java
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javac /usr/bin/javac
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javadoc /usr/bin/javadoc
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javah /usr/bin/javah
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javap /usr/bin/javap
    sudo ln -s /usr/lib/jvm/jdk1.6.0_32/bin/javaws /usr/bin/javaws
    javac -version    
    java -version
    ;;
  7)
    echo "Setting Java version 7"
    export PATH=/usr/lib/jvm/java-7-openjdk/bin:$PATH
    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk/
    sudo rm /usr/bin/java
    sudo rm /usr/bin/javac
    sudo rm /usr/bin/javadoc
    sudo rm /usr/bin/javah
    sudo rm /usr/bin/javap
    sudo rm /usr/bin/javaws
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/java /usr/bin/java
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javac /usr/bin/javac
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javadoc /usr/bin/javadoc
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javah /usr/bin/javah
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javap /usr/bin/javap
    sudo ln -s /usr/lib/jvm/java-7-openjdk/bin/javaws /usr/bin/javaws
    javac -version
    java -version
    ;;
  *)
    echo "Usage: $0 {6|7}"

esac
exit 0
Konrad Höffner
sumber
Hoffner Tidak yakin bagaimana pernyataan ekspor akan bekerja. Mereka tidak berfungsi ketika saya mencoba.
SureshS