อะไรคือความแตกต่างระหว่าง JAVA_HOME และการปรับปรุงทางเลือก


13

ฉันพยายามหาวิธีที่ดีที่สุดในการรัน OpenJDK Java Runtime เป็นค่าเริ่มต้น Java สำหรับกล่อง Fedora ของฉันและใช้ Oracle JDK 6 สำหรับการพัฒนา Android สำหรับการใช้ Android SDK Manager, Android Studio และ Eclipse จาก Android Bundle

ฉันติดตั้ง OpenJDK Java Runtime จากที่เก็บ Fedora ซึ่งมีทางเลือกในการตั้งค่าดังนี้

[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

ฉันติดตั้ง Oracle JDK 6 โดยใช้ rpm ที่ได้รับจาก Oracle

ฉันจะทำให้ Android Bundle และสตูดิโอให้ใช้ JAVA_HOME ให้ทำงานภายใต้ออราเคิล JDK .bashrcโดยการเกาะต่อไปนี้ใน

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

ฉันสังเกตเห็นว่า Chrome ยังคงใช้ OpenJDK (เพราะฉันยังต้องเชื่อมโยงปลั๊กอิน)

อะไรคือความแตกต่างระหว่าง JAVA_HOME และการใช้ทางเลือก?

คำตอบ:


11

ทางเลือก

ทางเลือกเป็นเครื่องมือที่จะจัดการตำแหน่งของซอฟต์แวร์ที่ติดตั้งโดยใช้ลิงก์ภายใต้การควบคุมของalternativesเครื่องมือ

เชื่อมโยงเหล่านี้มีการจัดการในที่สุดภายใต้/etc/alternativesที่มีการเชื่อมโยงกลางสร้างขึ้นภายใต้ไดเรกทอรีในโดยทั่วไป$PATH/usr/bin

ตัวอย่าง

$ 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_HOMEเป็นที่ซึ่งซอฟต์แวร์สามารถบอกให้มองผ่านการใช้ตัวแปรสภาพแวดล้อม เพิ่มไปยัง$PATHเป็นเพียงการเพิ่ม executables ในปัจจุบันของคุณ$JAVA_HOME/bin $PATHบางครั้งสิ่งนี้จำเป็นสำหรับบางแอปพลิเคชัน

กลไกทั้งสองเกี่ยวข้องกัน แต่สามารถใช้ร่วมกันหรือเป็นอิสระจากกันมันขึ้นอยู่กับแอปพลิเคชัน Java ซึ่งเป็นกลไกที่ดีกว่า

สิ่งที่ฉันทำ

โดยทั่วไปฉันใช้$JAVA_HOMEสำหรับแอปพลิเคชัน GUI บางตัว แต่โดยทั่วไปจะใช้สำหรับการติดตั้งเซิร์ฟเวอร์ที่ใช้ Jetty, Tomcat หรือ JBOSS เท่านั้น

สำหรับการติดตั้งเหล่านี้ผมก็ยังจะใช้alternativesในการจัดการการติดตั้ง Java $JAVA_HOMEก่อนที่จะมีการตั้งค่า ฉันชอบทำแบบนี้ในกรณีที่ฉันอาจต้องติดตั้ง Java หลายตัว

ทางเลือกอื่นช่วยให้คุณมีเครื่องมือบางอย่างที่ใช้การติดตั้ง Java หนึ่งครั้งในขณะที่เครื่องมืออื่น ๆ ใช้เครื่องมือที่แตกต่างกันโดยสิ้นเชิง

อ้างอิง


ของแถมคือทางเลือกที่ฉันสามารถใช้ส่วนประกอบต่าง ๆ ของ Java ยกตัวอย่างเช่นทางเลือกสามารถตั้งค่าjavaและjavacจาก JDKs ที่แตกต่างกันในทางกลับกันJAVA_HOME=JAVALOCATIONจะชี้ให้java, javacและjavawsการjava, javacและjavawsในJAVALOCATIONตามลำดับ
Sudhir Khanger

เหตุผลที่ฉันถามคำถามนี้คือฉันจะใช้ OpenJDK เป็น Java Runtime ที่เป็นค่าเริ่มต้นและทำให้ Android Studio, Eclipse และ SDK Manager ใช้ Oracle JDK ได้อย่างไร ฉันสามารถเรียกใช้โปรแกรมทั้งสามภายใต้ Oracle JDK โดยการแก้ไขสคริปต์เริ่มต้นของพวกเขาอย่างหนักซึ่งอาจเสียหายหากมีการอัปเดต ฉันกำลังมองหาสิ่งทั่วไปมากกว่าSTUDIO_JDKที่ฉันสามารถเพิ่ม~/.profileหรือ~/.bashrcที่ Android Studio ใช้เพื่อรับ JDK แต่ฉันคิดว่า Android Bundle (Eclipse และ SDK Manager) จะไม่ให้เกียรติ
Sudhir Khanger

@donniezazen - ใช่STUDIO_JDKเป็นสิ่งที่กำหนดเอง ผมจะใช้ทางเลือกสำหรับเครื่องมือเหล่านั้นและการตั้งค่าJAVA_HOMEที่จะอยู่ภายใต้เส้นทางที่มีการจัดการโดย/usr/bin alternativesเมื่อทำการอัพเกรดจะต้องทำการเปลี่ยนแปลงalternativesทุกอย่างที่ต้องการ
slm

ฉันไม่แน่ใจว่าคุณกำลังเสนออะไร จุดทั้งสองalternativesและการที่จะบอกว่าJAVA_HOME /usr/bin/javaนอกจากนี้ยังดูเหมือนว่าการแทนที่JAVA_HOME alternatives
Sudhir Khanger

@donniezazen - ใช่ใช้ทางเลือกในการจัดการการติดตั้ง JAVA ของคุณและจากนั้นใช้ชี้ไปยังJAVA_HOME /usr/binคุณถูกต้องสามารถทำงานเป็นอิสระจากJAVA_HOME alternatives
slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.