สภาวะแวดล้อม Java หลายสภาพแวดล้อมบนเครื่อง Linux เดียวกัน


9

วิธีที่มีประสิทธิภาพที่สุดในการติดตั้งJava JDK หลายรุ่นพร้อมกันบนเครื่อง Linux เดียวกันคืออะไร?

ฉันต้องการ Java5 ในขณะที่ Ubuntu 9.10 Karmic ปัจจุบันของฉันมาพร้อมกับ Java6

ฉันรู้ว่าฉันสามารถตั้งค่า VM สำหรับสิ่งนี้ แต่ฉันกำลังมองหาทางเลือกอื่น

คำตอบ:


5

หากคุณดาวน์โหลดไบนารี 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 เฉพาะที่ไม่ใช่ค่าเริ่มต้นของระบบ


ขอบคุณ แต่ฉันต้องติดตั้งพร้อมกัน ฉันจะทำอย่างไร
jldupont

ขอบคุณ ฉันได้ติดตั้ง JDK5 ใน / opt แล้วและเขียนสคริปต์ทุบตีตัวเองเพื่อตั้งค่าตัวแปรสภาพแวดล้อม ... ดูเหมือนว่าใช้งานได้ ฉันคิดว่ามันจะเจ็บปวดมากกว่านี้!
jldupont

@ jldupont: ที่จริงแล้วเป็นหนึ่งในสิ่งที่ฉันชอบเกี่ยวกับ linux ... เนื่องจากไม่มีการลงทะเบียนสตรีคุณสามารถติดตั้งสิ่งเดียวกันได้ร้อยครั้งและมันก็ไม่เป็นปัญหาตราบใดที่คุณมั่นใจ เพื่อไม่ให้เขียนไฟล์ทั่วไปมากเกินไป ฉันรู้จักผู้คนมากมายที่ใช้ Apache (ตัวอย่าง) หลายเวอร์ชันที่แตกต่างกันของ Apache ตัวฉันเองมักจะรัน Perl และ Java หลายเวอร์ชัน
Satanicpuppy

1

เพียงดาวน์โหลดและเรียกใช้ไฟล์. 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

Hoffner ไม่แน่ใจว่างบการส่งออกจะทำงานอย่างไร พวกเขาไม่ทำงานเมื่อฉันลอง
SureshS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.