ฉันจะติดตั้ง Java บน Mac OSX ที่อนุญาตให้สลับรุ่นได้อย่างไร


313

ฉันต้องการติดตั้ง OpenJDK Java บน Mac OSX และใช้งานร่วมกับ JDK อื่นเนื่องจากเป็นรุ่นใหม่กว่า ขณะนี้ฉันดาวน์โหลด tar.gz แล้ววางไว้ในเส้นทางของฉัน แต่ยากที่จะดูแล

การติดตั้งอื่น ๆ เท่านั้นที่ฉันพบว่าทำสิ่งต่าง ๆ ได้โดยอัตโนมัติคือการติดตั้งผ่าน Homebrew cask ดูเหมือนว่าเฉพาะรุ่นปัจจุบันด้วย:

brew cask info java

แสดงให้เห็นว่า:

java: 13,33: 5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/

ดังนั้นฉันสามารถติดตั้งได้จากที่นั่น แต่แล้วอะไรนะ? ฉันติดอยู่กับเวอร์ชั่นใหม่เท่านั้นหรือไม่?


เพิ่งถามเราสามารถ จำกัด แท็กคำถามให้เป็นเวอร์ชันเดียวได้หรือไม่ เนื่องจากไม่มีสคริปต์ / ขั้นตอนการติดตั้งเฉพาะรุ่นดังกล่าวอยู่แล้ว นี่เป็นคำถามทั่วไป (ไม่ใช่รุ่นที่เฉพาะเจาะจง) และสามารถติดแท็กได้ด้วยjava-11เท่านั้นเนื่องจากฉันคิดว่าเป็นสถานที่ที่ผู้คนจะเริ่มมองหาสิ่งที่คำถามและคำตอบแนะนำ
Naman

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

ฉันอาจจะแนะนำให้ใช้jenvเพื่อจัดการ Java หลายเวอร์ชัน
paranza

คำตอบ:


718

หมายเหตุ: โซลูชั่นเหล่านี้ทำงานได้กับ Java รุ่นต่างๆรวมถึง Java 8 และ Java 13 ใหม่และสำหรับ Java รุ่นก่อนหน้าอื่น ๆ ที่มีการจัดการโดยผู้จัดการเวอร์ชันที่แสดงรายการไว้ ซึ่งรวมถึงทางเลือกของ JDK จาก OpenJDK, Oracle, IBM, Azul, Amazon Correto, Graal และอีกมากมาย ทำงานกับ Java 7, Java 8, Java 9, Java 10, Java 11, Java 12 และ Java 13 ได้อย่างง่ายดาย!

คุณมีตัวเลือกไม่กี่วิธีในการติดตั้งรวมถึงจัดการการสลับ JDK การติดตั้งสามารถทำได้โดย Homebrew, SDKMAN , Jabbaหรือการติดตั้งด้วยตนเอง สลับสามารถทำได้โดยการJEnv , SDKMAN , แจ๊บบ้าJAVA_HOMEหรือด้วยตนเองโดยการตั้งค่า ทั้งหมดนี้อธิบายไว้ด้านล่าง


การติดตั้ง

ขั้นแรกให้ติดตั้ง Java โดยใช้วิธีใดก็ได้ที่คุณต้องการรวมถึง Homebrew, SDKMAN หรือติดตั้งไฟล์ tar.gz ด้วยตนเอง ข้อดีของการติดตั้งแบบแมนนวลคือตำแหน่งของ JDK สามารถวางในตำแหน่งมาตรฐานสำหรับ Mac OSX

ติดตั้งด้วย SDKMAN

นี่เป็นรูปแบบที่เรียบง่ายในการจัดการทั้งการติดตั้งและการสลับรุ่นโดยมีข้อแม้ที่ติดตั้ง JDK ลงในไดเรกทอรีที่ไม่ได้มาตรฐาน

< ดูด้านล่าง "การติดตั้งและเปลี่ยนเวอร์ชั่นด้วย SDKMAN" >

ติดตั้งโดยใช้ Jabba

นอกจากนี้ยังเป็นรุ่นที่เรียบง่ายในการติดตั้งและการสลับรุ่นที่ได้รับการจัดการโดยเครื่องมือเดียวกัน การติดตั้งนั้นทำกับไดเรกทอรีที่ไม่ได้มาตรฐาน

< ดูด้านล่าง "การติดตั้งและเปลี่ยนเวอร์ชั่นด้วย Jabba" >

ติดตั้งด้วยตนเองจากหน้าดาวน์โหลด OpenJDK:

  1. ดาวน์โหลด OpenJDK สำหรับ Mac OSX จากhttp://jdk.java.net/ (ตัวอย่างเช่นJava 13 )

  2. ยกเลิกการเก็บถาวร tar ของ OpenJDK และวางโฟลเดอร์ผลลัพธ์ (เช่นjdk-13.jdk) ลงใน/Library/Java/JavaVirtualMachines/โฟลเดอร์ของคุณเนื่องจากนี่เป็นตำแหน่งมาตรฐานและที่คาดหวังของการติดตั้ง JDK คุณสามารถติดตั้งได้ทุกที่ที่คุณต้องการ

ติดตั้งด้วย Homebrew

Java เวอร์ชันที่มีอยู่ใน Homebrew Cask ก่อนวันที่ 3 ตุลาคม 2018 เป็น Oracle JVM แน่นอน อย่างไรก็ตามตอนนี้มันได้รับการอัพเดตเป็น OpenJDK อย่าลืมอัปเดต Homebrew จากนั้นคุณจะเห็นเวอร์ชันล่าสุดพร้อมสำหรับการติดตั้ง

  1. ติดตั้ง Homebrewหากคุณยังไม่ได้ติดตั้ง ตรวจสอบให้แน่ใจว่ามีการอัปเดต:

    brew update
  2. เพิ่มการแตะถังถ้าคุณยังไม่ได้ (หรือคุณไม่เห็น Java เวอร์ชันที่เก่ากว่าอีกต่อไปด้วยขั้นตอนที่ 3):

    brew tap homebrew/cask-versions

    และสำหรับเวอร์ชั่นAdoptOpenJDKให้เพิ่มแท็ปนั้น:

    brew tap adoptopenjdk/openjdk

    ถังเหล่านี้เปลี่ยนรุ่น Java บ่อยและอาจมีก๊อกอื่น ๆ ที่มีรุ่น Java เพิ่มเติม

  3. ค้นหาเวอร์ชันที่ติดตั้งได้:

    brew search java   

    หรือสำหรับ AdoptOpenJDK เวอร์ชั่น:

    brew search jdk     
  4. ตรวจสอบรายละเอียดเกี่ยวกับรุ่นที่จะติดตั้ง:

    brew cask info java

    หรือสำหรับเวอร์ชั่น AdoptOpenJDK:

    brew cask info adoptopenjdk
  5. ติดตั้งรุ่นที่เฉพาะเจาะจงของ JDK เช่นjava11, adoptopenjdk8หรือเพียงแค่javaหรือadoptopenjdkสำหรับปัจจุบัน ตัวอย่างเช่น:

    brew cask install java

    คุณสามารถใช้พา ธ แบบเต็มไปยังเวอร์ชันเก่าได้เช่นกัน:

    brew cask install homebrew/cask-versions/java11

และสิ่งเหล่านี้จะถูกติดตั้ง/Library/Java/JavaVirtualMachines/ซึ่งเป็นตำแหน่งดั้งเดิมที่คาดหวังไว้ใน Mac OSX

ตัวเลือกการติดตั้งอื่น ๆ :

รสชาติอื่น ๆ ของ openJDK คือ:

Azul ระบบ Java ซูลูได้รับการรับรองสร้างของ OpenJDK สามารถติดตั้งได้โดยทำตามคำแนะนำบนเว็บไซต์ของพวกเขา

Zulu®เป็นบิลด์ที่ได้รับการรับรองของ OpenJDK ซึ่งสอดคล้องกับมาตรฐาน Java SE อย่างสมบูรณ์ Zulu เป็นโอเพ่นซอร์ส 100% และสามารถดาวน์โหลดได้อย่างอิสระ ตอนนี้ผู้พัฒนา Java ผู้ดูแลระบบและผู้ใช้ปลายทางสามารถเพลิดเพลินกับประโยชน์เต็มที่ของ Java แบบโอเพ่นซอร์สที่มีความยืดหยุ่นในการปรับใช้และควบคุมเวลาในการอัปเกรด

Amazon Correto OpenJDK builds มีแพคเกจการติดตั้งที่ใช้งานง่ายสำหรับเวอร์ชัน 8 หรือเวอร์ชัน 11 (เวอร์ชั่นอื่นกำลังจะมา) และติดตั้งไปยัง/Library/Java/JavaVirtualMachines/ไดเรกทอรีมาตรฐานบน Mac OSX

Amazon Corretto เป็นการแจกจ่ายแบบหลายแพลตฟอร์มที่ไม่มีต้นทุนและพร้อมสำหรับการผลิตของ Open Java Development Kit (OpenJDK) Corretto มาพร้อมกับการสนับสนุนระยะยาวซึ่งจะรวมถึงการปรับปรุงประสิทธิภาพและการแก้ไขด้านความปลอดภัย Amazon ดำเนินงาน Corretto ภายในกับบริการการผลิตหลายพันรายการและ Corretto ได้รับการรับรองว่าเข้ากันได้กับมาตรฐาน Java SE ด้วย Corretto คุณสามารถพัฒนาและรันแอปพลิเคชัน Java บนระบบปฏิบัติการที่ได้รับความนิยมรวมถึง Linux, Windows และ macOS


JDK ของฉันอยู่ที่ไหน!?!

หากต้องการค้นหาตำแหน่งของ Java JDK ที่ติดตั้งไว้ก่อนหน้านี้ที่ติดตั้งที่ตำแหน่งระบบเริ่มต้นให้ใช้:

/usr/libexec/java_home -V

การจับคู่ Java Virtual Machines (6):
13, x86_64: "OpenJDK 13" /Library/Java/JavaVirtualMachines/openjdk-13.jdk/Contents/Home 12, x86_64: "OpenJDK 12" / ไลบรารี / Java / JavaVirtualMachines / jdk-12 .jdk / สารบัญ / Home
11, x86_64: "Java SE 11" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: "Java SE 10.0.2" / ไลบรารี / Java / JavaVirtualMachines /jdk-10.0.2.jdk/Contents/Home
9, x86_64: "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
1.8.0_144, x86_64: "Java SE 8" / ไลบรารี /Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

นอกจากนี้คุณยังสามารถรายงานตำแหน่งของ Java เวอร์ชันที่-vระบุได้ ตัวอย่างเช่น Java 13:

/usr/libexec/java_home -v 13

/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

การทราบตำแหน่งของ JDK ที่ติดตั้งนั้นยังมีประโยชน์เมื่อใช้เครื่องมือเช่น JEnv หรือเพิ่มการติดตั้งในท้องถิ่นเป็น SDKMAN หรือเชื่อมโยงระบบ JDK ใน Jabba - และคุณจำเป็นต้องรู้ว่าจะหาได้จากที่ไหน

หากคุณต้องการค้นหา JDK ที่ติดตั้งโดยเครื่องมืออื่นให้ตรวจสอบที่ตั้งเหล่านี้:

  • SDKMAN ติดตั้ง ~/.sdkman/candidates/java/
  • Jabba ติดตั้งเพื่อ ~/.jabba/jdk

สลับรุ่นด้วยตนเอง

Java executable เป็น wrapper ที่จะใช้ JDK อะไรก็ตามที่มีการกำหนดค่าJAVA_HOMEดังนั้นคุณสามารถเปลี่ยนมันเพื่อเปลี่ยน JDK ที่ใช้อยู่ได้เช่นกัน

ตัวอย่างเช่นหากคุณติดตั้งหรือเลิก JDK 13 /Library/Java/JavaVirtualMachines/jdk-13.jdkหากเป็นหมายเลขเวอร์ชันสูงสุดควรเป็นค่าเริ่มต้นแล้วหากไม่ใช่คุณสามารถตั้งค่าได้ง่ายๆ:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

และตอนนี้สิ่งที่ Java ที่ปฏิบัติการอยู่ในพา ธ จะเห็นสิ่งนี้และใช้ JDK ที่ถูกต้อง

การใช้/usr/libexec/java_homeยูทิลิตี้ตามที่อธิบายไว้ก่อนหน้านี้ช่วยให้คุณสร้างนามแฝงหรือเรียกใช้คำสั่งเพื่อเปลี่ยนเวอร์ชั่น Java โดยการระบุตำแหน่งของการติดตั้ง JDK ที่แตกต่างกัน ตัวอย่างเช่นการสร้างสมนามเชลล์ในของคุณ.profileหรือ.bash_profileเพื่อเปลี่ยนJAVA_HOMEสำหรับคุณ:

export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_9_HOME=$(/usr/libexec/java_home -v9)
export JAVA_10_HOME=$(/usr/libexec/java_home -v10)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_12_HOME=$(/usr/libexec/java_home -v12)
export JAVA_13_HOME=$(/usr/libexec/java_home -v13)

alias java8='export JAVA_HOME=$JAVA_8_HOME'
alias java9='export JAVA_HOME=$JAVA_9_HOME'
alias java10='export JAVA_HOME=$JAVA_10_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java12='export JAVA_HOME=$JAVA_12_HOME'
alias java13='export JAVA_HOME=$JAVA_13_HOME'

# default to Java 13
java13

จากนั้นหากต้องการเปลี่ยนเวอร์ชันให้ใช้นามแฝง

java8
java -version

รุ่น java "1.8.0_144"

แน่นอนว่าการตั้งค่าJAVA_HOMEทำงานด้วยตนเองเช่นกัน!


การสลับรุ่นด้วย JEnv

JEnvคาดว่า Java JDK จะมีอยู่แล้วบนเครื่องและสามารถอยู่ในตำแหน่งใดก็ได้ /Library/Java/JavaVirtualMachines/โดยปกติแล้วคุณจะพบว่าการติดตั้งใน Java JDK ของ JEnv อนุญาตให้ตั้งค่าเวอร์ชันสากลของ Java หนึ่งรายการสำหรับเชลล์ปัจจุบันและเวอร์ชันโลคัลไดเร็กทอรีต่อไดเร็กทอรีซึ่งสะดวกเมื่อบางโปรเจ็กต์ต้องการเวอร์ชันที่แตกต่างจากที่อื่น

  1. ติดตั้ง JEnv หากคุณยังไม่มีคำแนะนำในเว็บไซต์http://www.jenv.be/สำหรับการติดตั้งด้วยตนเองหรือใช้ Homebrew

  2. เพิ่ม Java เวอร์ชันใด ๆ ลงใน JEnv ( ปรับไดเรกทอรีถ้าคุณวางไว้ที่อื่น ):

    jenv add /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
  3. ตั้งค่าเวอร์ชันโกลบอลของคุณโดยใช้คำสั่งนี้:

    jenv global 13

นอกจากนี้คุณยังสามารถเพิ่มเวอร์ชันอื่น ๆ ที่มีอยู่โดยใช้jenv addในลักษณะที่คล้ายกันและรายการที่มีอยู่ ตัวอย่างเช่น Java 8:

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home 
jenv versions

ดูเอกสาร JEnvสำหรับคำสั่งเพิ่มเติม ตอนนี้คุณสามารถสลับระหว่างเวอร์ชัน Java (Oracle, OpenJDK, อื่น ๆ ) ได้ตลอดเวลาทั้งระบบสำหรับเชลล์หรือต่อโลคัลไดเร็กทอรี

เพื่อช่วยจัดการJAVA_HOMEในขณะที่ใช้ JEnv คุณสามารถเพิ่มปลั๊กอินส่งออกเพื่อทำสิ่งนี้ให้คุณ

$ jenv enable-plugin export
  You may restart your session to activate jenv export plugin echo export plugin activated

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

คุณยังสามารถใช้jenv exec <command> <parms...>เพื่อเรียกใช้คำสั่งเดียวด้วยJAVA_HOMEและPATHตั้งค่าอย่างถูกต้องสำหรับคำสั่งนั้นซึ่งอาจรวมถึงการเปิดเปลือกอื่น


การติดตั้งและเปลี่ยนเวอร์ชั่นด้วย SDKMAN

SDKMANนั้นแตกต่างกันเล็กน้อยและรองรับทั้งการติดตั้งและการสลับ SDKMAN ยังสถานที่ที่ติดตั้ง JDK ~/.sdkman/candidates/javaเข้าไปในต้นไม้ไดเรกทอรีของตัวเองซึ่งเป็นปกติ SDKMAN อนุญาตให้ตั้งค่าเวอร์ชันเริ่มต้นส่วนกลางและรุ่นเฉพาะสำหรับเชลล์ปัจจุบัน

  1. ติดตั้ง SDKMAN จากhttps://sdkman.io/install

  2. แสดงรายการเวอร์ชัน Java ที่มีอยู่เพื่อให้แน่ใจว่าคุณทราบรหัสเวอร์ชัน

    sdk list java
  3. ติดตั้งหนึ่งในเวอร์ชันเหล่านั้นตัวอย่างเช่น Java 13:

    sdk install java 13.0.0-open 
  4. กำหนดเป็น 13 รุ่นเริ่มต้น:

    sdk default java 13.0.0-open

    หรือเปลี่ยนเป็น 13 สำหรับเซสชัน:

    sdk use java 13.0.0-open

เมื่อคุณแสดงรายการเวอร์ชันที่พร้อมใช้งานสำหรับการติดตั้งโดยใช้คำสั่ง list คุณจะเห็นความหลากหลายของ Java:

sdk list java

และติดตั้งเวอร์ชันเพิ่มเติมเช่น JDK 8:

sdk install java 8.0.181-oracle

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

sdk install java my-local-13 /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home

และใช้มันอย่างอิสระ:

sdk use java my-local-13

ข้อมูลเพิ่มเติมมีอยู่ในคู่มือการใช้งาน SDKMANพร้อมกับSDK อื่น ๆสามารถติดตั้งและจัดการได้

SDKMAN จะจัดการPATHและJAVA_HOMEให้คุณโดยอัตโนมัติเมื่อคุณเปลี่ยนเวอร์ชัน


การติดตั้งและเปลี่ยนเวอร์ชั่นด้วย Jabba

Jabbaยังจัดการทั้งการติดตั้งและการสลับ Jabba ยังวาง JDK ที่ติดตั้งไว้ในแผนผังไดเร็กทอรีของตัวเองซึ่งโดยทั่วไปแล้ว~/.jabba/jdkเข้าไปในต้นไม้ไดเรกทอรีของตัวเองซึ่งเป็นปกติ

  1. ติดตั้ง Jabba โดยทำตามคำแนะนำในหน้าแรก

  2. รายการของ JDK ที่มีอยู่

    jabba ls-remote
  3. ติดตั้ง Java JDK 12

    jabba install openjdk@1.12.0
  4. ใช้มัน:

    jabba use openjdk@1.12.0

คุณสามารถนามแฝงชื่อรุ่นเชื่อมโยงไปยัง JDK ที่มีอยู่แล้วและหาส่วนผสมของ JDK ที่น่าสนใจเช่น GraalVM, Adopt JDK, IBM JDK และอื่น ๆ คู่มือการใช้งานที่สมบูรณ์มีอยู่ในหน้าแรกเช่นกัน

Jabba จะจัดการของคุณPATHและJAVA_HOMEให้คุณโดยอัตโนมัติเมื่อคุณเปลี่ยนเวอร์ชัน


2
สำหรับการติดตั้งด้วยตนเองฉันคิดว่าคุณจำเป็นต้องตั้งค่าJAVA_HOMEเพื่อเลือกรุ่นเฉพาะบางอย่างเช่นเดียวกับexport JAVA_HOME=$(/usr/libexec/java_home -v <version>)ในของคุณ.bash_profile
Peter Hull

@PeterHull ผู้จัดการเวอร์ชัน Java บางคนไม่ชอบJAVA_HOMEตั้งค่าด้วยตนเองและจัดการเอง JEnv แน่นอนจะไม่ปรับถ้าตั้งไว้ก่อนหน้านี้ไม่แน่ใจเกี่ยวกับ Jabba และ SDKMAN แต่โดยปกติพวกเขาจะจัดการการตั้งค่านั้น เฉพาะการติดตั้งด้วยตนเองที่ไม่มีการสลับเวอร์ชันควรตั้งค่านี้โดยตรง
Jayson Minard

เห็นด้วยค่อนข้างจะดีถ้าคุณสามารถทราบว่าในคำตอบของคุณตามคำถามเดิมที่ถามสำหรับการสลับรุ่นและการตั้งค่า JAVA_HOME เป็นวิธี (เท่านั้น?) ที่จะทำสำหรับวิธีการติดตั้งด้วยตนเอง
Peter Hull

2
Java ในถังต้มเปลี่ยนเป็น OpenJDK 11 เมื่อวาน, 3 ต.ค. , 2018
งหวางหวง

16
อาจเป็นคำตอบที่กว้างขวางและมีประโยชน์ที่สุดในการใช้งาน JDK ที่แตกต่างกันบน MacOS ซึ่งครอบคลุมวิธีการที่แตกต่างกันไปบางอย่างที่ฉันไม่เคยเจอมาก่อน
Kevin Hooke

7

นี่คือวิธีที่ฉันทำ

ขั้นตอนที่ 1: ติดตั้ง Java 11

คุณสามารถดาวน์โหลด Java 11 dmg สำหรับ mac ได้จากที่นี่: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

ขั้นตอนที่ 2:หลังจากติดตั้ง Java 11 ยืนยันการติดตั้งทุกรุ่น พิมพ์คำสั่งต่อไปนี้ในเทอร์มินัลของคุณ

/usr/libexec/java_home -V

ขั้นตอนที่ 3:แก้ไข. bash_profile

sudo nano ~/.bash_profile

ขั้นตอนที่ 4:เพิ่ม 11.0.1 เป็นค่าเริ่มต้น (เพิ่มบรรทัดด้านล่างลงในไฟล์ bash_profile)

export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)

เพื่อเปลี่ยนเป็นเวอร์ชันใดก็ได้

export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)

ตอนนี้กด CTRL + X เพื่อออกจาก bash กด 'Y' เพื่อบันทึกการเปลี่ยนแปลง

ขั้นตอนที่ 5:โหลด bash_profile ซ้ำ

source ~/.bash_profile

ขั้นตอนที่ 6:ยืนยัน Java เวอร์ชันปัจจุบัน

java -version

ทางออกที่ดี แต่ถ้ายังมี java -version ชี้ไปที่ 8 ในขณะที่ฉันส่งออก JAVA_HOME 11
AlexGera

1
คำถามกำลังถามเกี่ยวกับ Open JDK แต่คุณเชื่อมโยงกับ Oracle JDK แทน Open JDK ดูเหมือนจะไม่มีคำแนะนำในการติดตั้งหรือการติดตั้ง
Splaktar

1
ในการตอบกลับถึง @AlexGera - เพิ่มบรรทัดนี้: ส่งออก $ PATH = $ JAVA_HOME / bin: $ PATH
Fuad Efendi

6

การสลับรุ่นเริ่มต้นของระบบด้วยตนเองโดยไม่ต้องใช้เครื่องมือของบุคคลที่สาม:

ตามรายละเอียดในคำตอบที่เก่ากว่านี้บน macOS /usr/bin/javaเป็นเครื่องมือตัวห่อหุ้มที่จะใช้ Java เวอร์ชันที่มีการชี้JAVA_HOMEหรือถ้าตัวแปรนั้นไม่ได้ตั้งค่าไว้จะค้นหาการติดตั้ง Java ภายใต้/Library/Java/JavaVirtualMachines/และจะใช้อันที่มีรุ่นสูงสุด มันเป็นตัวกำหนดเวอร์ชันโดยดูที่Contents/Info.plistแต่ละแพ็คเกจ

ด้วยความรู้นี้คุณสามารถ:

  • ควบคุมเวอร์ชันที่ระบบจะใช้โดยเปลี่ยนชื่อInfo.plistในเวอร์ชันที่คุณไม่ต้องการใช้เป็นค่าเริ่มต้น (ไฟล์นั้นไม่ได้ใช้โดยรันไทม์ Java จริงของตัวเอง)
  • ควบคุมเวอร์ชันที่จะใช้สำหรับงานเฉพาะโดยการตั้งค่า $JAVA_HOME

ฉันเพิ่งตรวจสอบว่านี่ยังคงเป็นจริงกับ OpenJDK & Mojave

บนระบบใหม่เอี่ยมไม่มีการติดตั้งเวอร์ชั่น Java:

$ java -version
No Java runtime present, requesting install.

ยกเลิกสิ่งนี้ดาวน์โหลด OpenJDK 11 & 12ea บนhttps://jdk.java.net ; ติดตั้ง OpenJDK11:

$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz

ระบบ java ตอนนี้ 11:

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

ติดตั้ง OpenJDK12 (เข้าถึงได้ในขณะนี้):

$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz 

ระบบ java คือ 12:

$ java -version
openjdk version "12-ea" 2019-03-19
[...]

ทีนี้ลอง "ซ่อน" OpenJDK 12 จาก system java wrapper:

$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled

ระบบ java กลับไปเป็น 11:

$ java -version
openjdk version "11.0.1" 2018-10-16
[...]

และคุณยังคงสามารถใช้เวอร์ชัน 12 ได้ตรงเวลาโดยการตั้งค่าด้วยตนเองJAVA_HOME:

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]

1
และมันควรจะเป็นจริงในขณะนี้ด้วยAdoptOpenJDK builds
Hugues M.

6

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

ส่งออก JAVA_HOME_7 = $ (/ usr / libexec / java_home -v1.7)

ส่งออก JAVA_HOME_8 = $ (/ usr / libexec / java_home -v1.8)

ส่งออก JAVA_HOME_9 = $ (/ usr / libexec / java_home -v9)

และเพิ่มชื่อแทนต่อไปนี้:

นามแฝง java7 = 'ส่งออก JAVA_HOME = $ JAVA_HOME_7'

นามแฝง java8 = 'ส่งออก JAVA_HOME = $ JAVA_HOME_8'

นามแฝง java9 = 'ส่งออก JAVA_HOME = $ JAVA_HOME_9'

และสามารถเปลี่ยนเป็นเวอร์ชั่นที่ต้องการโดยใช้นามแฝง:

ในอาคารผู้โดยสาร:

~ >> java7 export JAVA_HOME=$JAVA_7_HOME


ใช่นี่ถูกครอบคลุมในคำตอบอื่นที่นี่
Jayson Minard

3

อีกทางเลือกหนึ่งคือการใช้SDKMAN ! ดู https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/

ก่อนติดตั้ง SDKMAN: https://sdkman.io/installจากนั้น ...

  1. ติดตั้ง Oracle JDK 8 ด้วย: sdk install java 8.0.181-oracle
  2. ติดตั้ง OpenJDK 11 ด้วย: sdk install java 11.0.0-open

วิธีเปลี่ยน:

  • เปลี่ยนเป็น JDK 8 ด้วย sdk use java 8.0.181-oracle
  • เปลี่ยนเป็น JDK 11 ด้วย sdk use java 11.0.0-open

ในการตั้งค่าเริ่มต้น:

  • เริ่มต้นที่ JDK 8 ด้วย sdk default java 8.0.181-oracle
  • เริ่มต้นกับ JDK 11 ด้วย sdk default java 11.0.0-open

3

ด้วย Homebrew และ jenv:

ข้อสันนิษฐาน: เครื่อง Mac และคุณได้ติดตั้ง homebrew แล้ว

ติดตั้งถัง:

$ brew tap caskroom/cask
$ brew tap caskroom/versions

ในการติดตั้ง java ล่าสุด:

$ brew cask install java

ในการติดตั้ง java 8:

$ brew cask install java8

ในการติดตั้ง java 9:

$ brew cask install java9

หากคุณต้องการติดตั้ง / จัดการหลายรุ่นคุณสามารถใช้ 'jenv':

ติดตั้งและกำหนดค่า jenv:

$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

เพิ่ม java ที่ติดตั้งลงใน jenv:

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/Contents/Home

วิธีดูจาวาที่ติดตั้งทั้งหมด:

$ jenv versions

คำสั่งดังกล่าวจะให้รายการของจาวาที่ติดตั้ง:

* system (set by /Users/lyncean/.jenv/version)
1.8
1.8.0.202-ea
oracle64-1.8.0.202-ea

กำหนดค่าเวอร์ชัน java ที่คุณต้องการใช้:

$ jenv global oracle64-1.6.0.39

1
Error: caskroom/cask was moved. Tap homebrew/cask-cask insteadแล้วfatal: repository 'https://github.com/Homebrew/homebrew-cask-cask/' not found
ChumiestBucket

สิ่งที่ @ChumiestBucket กล่าว - วิธีการแก้ปัญหานี้มีปัญหาหลายประการ
javadba

1

IMHO ไม่จำเป็นต้องติดตั้งแอปพลิเคชั่น / แพ็คเกจเพิ่มเติมทั้งหมด

ตรวจสอบเวอร์ชันที่มีโดยใช้คำสั่ง:

> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
    11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
    10.0.2, x86_64: "Java SE 10.0.2"    /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_181-zulu-8.31.0.1, x86_64:    "Zulu 8"    /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
    1.8.0_151, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
    1.7.0_80, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
    1.6.0_65-b14-468, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

ตอนนี้ถ้าคุณต้องการเลือก Azul JDK 8 ในรายการด้านบนและไม่ใช่ Java SE 8 ของ Oracle ให้เรียกใช้คำสั่งดังต่อไปนี้:

> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home

ในการเลือก Java SE 8 ของ Oracle คุณต้องเรียกใช้คำสั่ง:

> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

ในขณะที่คุณสามารถดูหมายเลขรุ่นที่ให้ไว้จะเป็นชุดของสตริงที่ไม่ซ้ำกัน: 1.8.0_181 เทียบกับ 1.8.0_151


ตัวอย่างแรกไม่ควรมีสตริงเวอร์ชัน1.8.0_181-zulu-8.31.0.1ใช่หรือไม่ หรือมันคือการจับคู่บางส่วน?
Jayson Minard

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