สลับระหว่างเวอร์ชัน Java หลายเวอร์ชัน


65

ขณะติดตั้ง Android Studio บน Ubuntu 14.04 ฉันได้รับข้อความว่าเวอร์ชั่น Java ของฉัน ( javac 1.7.0_79) ทำให้เกิดปัญหา ฉันพบวิธีแก้ปัญหาวิธีการติดตั้ง Java เวอร์ชันใหม่ของ Oracle:

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

อย่างไรก็ตามฉันกลัวว่านี่อาจจะเขียนทับopen-jdkJava เวอร์ชันปัจจุบันของฉัน เนื่องจากฉันไม่รู้ว่าโปรแกรมใดของฉันขึ้นอยู่กับ Java ฉันจึงกลัวว่านี่อาจทำให้โปรแกรมอื่น ๆ เหล่านี้เสียหายได้

มีวิธีที่จะทำให้แน่ใจว่าapt-getจะไม่เขียนทับ Java ก่อนหน้าของฉันหรือไม่ โดยทั่วไปฉันต้องการติดตั้งทั้งคู่และสามารถสลับระหว่างกันได้ด้วยตนเองขึ้นอยู่กับรุ่นที่ฉันต้องการ

คำตอบ:


83

ฉลาดรับจะไม่เขียนทับจาวารุ่นที่มีอยู่

หากต้องการสลับระหว่างเวอร์ชัน Java ที่ติดตั้งไว้ให้ใช้update-java-alternativesคำสั่ง

รายการรุ่น java ทั้งหมด:

update-java-alternatives --list

ตั้งค่าเวอร์ชัน java เป็นค่าเริ่มต้น (ต้องการสิทธิ์รูท):

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

... ซึ่ง/path/to/java/versionเป็นหนึ่งในรายการที่แสดงโดยคำสั่งก่อนหน้า (เช่น/usr/lib/jvm/java-7-openjdk-amd64)


ข้อมูลเพิ่มเติม:

update-java-alternativesเป็นเครื่องมือที่มีความสะดวกสบายที่ใช้ Debian ของระบบทางเลือก ( update-alternatives) เพื่อตั้งพวงของการเชื่อมโยงไปยังรุ่น JAVA ระบุ (เช่นjava, javac, ... )


1
สำหรับฉันสิ่งนี้ทำให้ java -version เป็น java8 แต่ JAVA_HOME ยังคงถูกตั้งค่าเป็น 7 :(
Nenotlep

คำถามนี้แก้ปัญหาของฉันด้วย @Nenotlep สิ่งที่ฉันทำคือแก้ไขตัวแปรสภาพแวดล้อมด้วยตนเองทั้งใน. bashrc หรือ / etc / environment
nuttynibbles

update-java-alternativesไม่มีให้สำหรับฉัน update-alternatives javaฉันเพียงแค่เปลี่ยนคำสั่งที่มี
nofinator

@nofinator ที่ส่งผลกระทบต่อjavaไฟล์ที่เรียกทำงานได้เท่านั้น คุณใช้ Ubuntu รุ่นไหน
danzel

1
@Nenotlep เพื่อที่จะเปลี่ยนJAVA_HOMEคุณต้องเรียกใช้คำสั่งต่อไปนี้: source /etc/environment
janb

48

ใช้

sudo update-alternatives --config java

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

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: 

ใช้

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

เพื่อตั้งค่า$JAVA_HOMEจากรุ่นที่ใช้งานปัจจุบัน


ดังที่บันทึกไว้โดย @danzel ที่คำตอบที่ยอมรับแล้วสิ่งนี้จะมีผลเฉพาะกับjavaไฟล์ที่ปฏิบัติการได้ไม่ใช่ส่วนอื่น ๆ ของการกำหนดค่า ใช้update-java-alternativesถ้ามี
Premek Brada

4

จากคำตอบจาก @muet ฉันพบว่าสิ่งนี้ทำงานได้อย่างราบรื่น:

เพิ่มไปที่~/.bashrc:

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

เพิ่มในนามแฝง:

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'

จากนั้นคุณสามารถสลับภายในเชลล์เดียวกันโดยใช้เพียง: useJava7หรือuseJava8


เพื่อให้ชื่อแทนถาวรสามารถใส่ไว้ใน ~ / .bashrc, ข้อมูลเพิ่มเติมได้ที่นี่askubuntu.com/questions/17536/ …
Konstantin Zyubin

E: ไม่สามารถค้นหาแพ็คเกจ oracle-java7-set-default ได้
Prakash Pandey

วิธีที่ง่ายที่สุดในการติดตั้งใช้งานและสลับไปมาระหว่างเวอร์ชันจาวาที่แตกต่างกันคือการใช้ SDKMAN! ดูที่นี่: sdkman.io/usage.html
brianjohnsen

เพิ่งเจอคำสั่งอื่นเพื่อตั้ง JAVA_HOME แต่ยังลอง.bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck

3

การกำหนดค่า Java

คุณสามารถกำหนดเวอร์ชันที่เป็นค่าเริ่มต้นสำหรับใช้ในบรรทัดคำสั่งโดยใช้update-alternativesซึ่งจัดการลิงก์สัญลักษณ์ที่ใช้สำหรับคำสั่งต่าง ๆ

sudo update-alternatives --config java

ผลลัพธ์จะมีลักษณะดังนี้

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:

ตอนนี้คุณสามารถเลือกหมายเลขที่จะใช้เป็นค่าเริ่มต้น สิ่งนี้สามารถทำได้สำหรับคำสั่ง Java อื่น ๆ เช่นคอมไพเลอร์ ( javac) ตัวสร้างเอกสาร ( javadoc), เครื่องมือการลงนาม JAR ( jarsigner) และอื่น ๆ คุณสามารถใช้คำสั่งต่อไปนี้กรอกคำสั่งที่คุณต้องการปรับแต่ง

sudo update-alternatives --config command

การตั้งค่าJAVA_HOMEตัวแปรสภาพแวดล้อม

หลายโปรแกรมเช่นเซิร์ฟเวอร์ Java ใช้ตัวแปรสภาพแวดล้อม JAVA_HOME เพื่อกำหนดตำแหน่งการติดตั้ง Java

คัดลอกพา ธ จากการติดตั้งที่คุณต้องการจากนั้นเปิด / etc / environment โดยใช้ Sublime Text หรือ Text editor ที่คุณชื่นชอบ

sudo subl /etc/environment

ในตอนท้ายของไฟล์นี้ให้เพิ่มบรรทัดต่อไปนี้ตรวจสอบให้แน่ใจว่าได้แทนที่เส้นทางที่ไฮไลต์ด้วยเส้นทางที่คัดลอกของคุณเอง

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

source /etc/environmentบันทึกและออกจากแฟ้มและโหลดได้: ตอนนี้คุณสามารถทดสอบว่าตัวแปรสภาพแวดล้อมที่ได้รับการกำหนดโดยรันคำสั่งต่อไปนี้:
echo $JAVA_HOMEนี่จะคืนค่าพา ธ ที่คุณเพิ่งตั้ง

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