วิธีที่มีประสิทธิภาพที่สุดในการติดตั้งJava JDK หลายรุ่นพร้อมกันบนเครื่อง Linux เดียวกันคืออะไร?
ฉันต้องการ Java5 ในขณะที่ Ubuntu 9.10 Karmic ปัจจุบันของฉันมาพร้อมกับ Java6
ฉันรู้ว่าฉันสามารถตั้งค่า VM สำหรับสิ่งนี้ แต่ฉันกำลังมองหาทางเลือกอื่น
วิธีที่มีประสิทธิภาพที่สุดในการติดตั้งJava JDK หลายรุ่นพร้อมกันบนเครื่อง Linux เดียวกันคืออะไร?
ฉันต้องการ Java5 ในขณะที่ Ubuntu 9.10 Karmic ปัจจุบันของฉันมาพร้อมกับ Java6
ฉันรู้ว่าฉันสามารถตั้งค่า VM สำหรับสิ่งนี้ แต่ฉันกำลังมองหาทางเลือกอื่น
คำตอบ:
หากคุณดาวน์โหลดไบนารี linuxจาก Sun คุณสามารถติดตั้งในไดเรกทอรีใดก็ได้ที่คุณต้องการ จากนั้นเพียงแค่อ้างอิง libs เหล่านั้นในรหัสของคุณและคุณก็พร้อมแล้ว
ด้วยตัวติดตั้งไบนารีมันจะสร้างไดเรกทอรีย่อยที่มีชื่อของตัวเอง (เช่นในตัวอย่างของคุณ /usr/java/jdk1.5.0_) เพื่อให้คุณสามารถดาวน์โหลดได้มากเท่าที่คุณต้องการและพวกมันจะเรียงตัวเองอย่างเหมาะสม ย่อย drectories
java binary ตัวหลักนั้นใช้งานได้ใน / usr / bin ดังนั้นหากคุณต้องการแทนที่มันไปยังจุดที่เมื่อคุณพิมพ์ "java" มันจะเข้าถึง java ของคุณและไม่ใช่ที่นั้นคุณเพียงแค่ย้ายเก่าออกจาก / usr / bin และเชื่อมโยงใหม่ของคุณในนั้น การพิมพ์which java
จะบอกคุณว่าจาวาเริ่มต้นในระบบของคุณคืออะไร
@ jldupont: เมื่อฉันคิดว่าการติดตั้งพร้อมกันฉันคิดว่าหลายรุ่นที่ติดตั้งในเครื่องเดียวกันซึ่งวิธีการของฉันจะให้คุณอย่างแน่นอน ฉันมีจาวาติดตั้งอยู่ประมาณ 12 เวอร์ชันในกล่องผลิตเพื่อจัดการกับองค์กรของฉันที่ยังไม่ได้อัปเดต
อย่างไรก็ตามเมื่อคุณพิมพ์ "java" คุณจะได้รับ java เวอร์ชันเดียวเท่านั้นนั่นคือสิ่งที่อยู่ใน '/usr/bin'... คุณต้องพิมพ์บางอย่างเช่น' /usr/java/jdk1.5.1/ bin / java 'เพื่อรับไบนารี java เฉพาะที่ไม่ใช่ค่าเริ่มต้นของระบบ
เพียงดาวน์โหลดและเรียกใช้ไฟล์. bin จาก oracle ซึ่งจะแตกไฟล์เองในโฟลเดอร์ ย้ายโฟลเดอร์นี้ (เช่นjdk1.6.0_32
) ไปที่ / usr / lib / jvm แล้วสคริปต์ที่setjava
ฉันใช้เพื่อเปลี่ยนจาวาเวอร์ชัน เนื่องจากexport
ข้อความที่คุณต้องอยู่ในอาคารผู้โดยสารเดียวกัน นอกจากนี้ยังมีเครื่องมือ jvm ขนาดเล็กบางตัวที่อาจไม่ได้ตั้งค่า แต่ฉันคิดว่ามันควรจะทำงานในกรณีส่วนใหญ่ นอกจากนี้ฉันเป็น noob เชลล์ดังนั้นโปรดแก้ไขฉันหากมีความเป็นไปได้ที่ดีกว่า :-) รหัสสำหรับฉันคือ:
#!/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