สลับระหว่าง Java 7 และ 8 ใน OS X


25

ฉันติดตั้ง Java-8 แล้ว ตอนนี้ฉันต้องการกลับไปที่ Java-7 โดยค่าเริ่มต้นดังนั้นฉันพิมพ์ใน ...

/usr/libexec/java_home -v 1.7.0_40 --exec java -version
/usr/libexec/java_home -v 1.7.0_40 --exec javac -version

แต่ฉันก็ยังเห็น ...

java -version
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b108)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b50, mixed mode)

มันใช้งานได้ ...

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home

แต่ฉันต้องการทางออกที่ถาวรกว่านี้

มีใครเห็นสิ่งที่ฉันทำผิดหรือเปล่า?

คำตอบ:


50

สลับรุ่นได้อย่างง่ายดาย

  1. ติดตั้งเวอร์ชัน 1.6, 1.7, 1.8 ในลำดับใดก็ได้ หมายเหตุ: ฉันเชื่อว่าการติดตั้งครั้งล่าสุดจะกำหนดว่าจะใช้ปลั๊กอินตัวใดของเบราว์เซอร์ฉันจะไม่สนใจที่จะเปลี่ยนแปลงสิ่งเหล่านี้ด้านล่าง

  2. จากนั้นเพิ่มไปยังของคุณ~/.bashrcหรือ~/.bash_profileหรือที่เคย:

    #!/bin/bash
    export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
    
    setjdk() {
       export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    }
    
  3. ตรวจสอบการเปลี่ยนแปลงผ่าน java -version

    $ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
    
    $ setjdk 1.6
    $ java -version
    java version "1.6.0_65"
    Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
    Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
    
    $ setjdk 1.8
    $ java -version
    java version "1.8.0"
    Java(TM) SE Runtime Environment (build 1.8.0-b132)
    Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
    

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


2
ปัญหาหนึ่ง: JDK7 ปฏิเสธที่จะติดตั้งถ้าคุณมี JDK8 แล้ว มันชี้ให้คุณไปที่ URL บน oracle.com สำหรับข้อมูลเพิ่มเติมที่ให้ 404 และแน่นอนคำแนะนำในการถอนการติดตั้งสำหรับ JDK8 ไม่ทำงานเลยดังนั้นตอนนี้ฉันก็หลงทาง
Eric W

1
เพียงใช้ jenv jenv.be
madzohan

9

คุณอาจใช้ jEnv ( http://www.jenv.be/ ) ซึ่งเป็น "เครื่องมือบรรทัดคำสั่งเพื่อช่วยให้คุณลืมวิธีตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME เพื่อสลับระหว่างรุ่นต่าง ๆ ของ JDK" (นำมาจากหน้าแรกของโครงการ )

หากคุณคุ้นเคยกับ Ruby JEnv ก็เหมือนกับการใช้ RVM หรือ rbenv ช่วยให้คุณจัดการ JDK ที่แตกต่างกันหลายตัวที่ติดตั้งบนเครื่องของคุณโดยไม่ต้องเขียนสคริปต์ของคุณเองเพื่อเปลี่ยนจาก JDK หนึ่งไปเป็นอีกอันหนึ่ง คุณสามารถเปลี่ยนจาวาเวอร์ชันปัจจุบันโดยอ้างอิงจากไดเรกทอรีปัจจุบันหรือตามไฟล์กำหนดค่า


คุณขยายได้ไหม ดูเหมือนว่าความคิดเห็นไม่ใช่คำตอบ
Austin T French

หากคุณคุ้นเคยกับ Ruby ก็เหมือนกับการใช้ RVM หรือ rbenv เพื่อเปลี่ยนจาวาเวอร์ชันปัจจุบันโดยอ้างอิงจากไดเรกทอรีปัจจุบันหรือตามไฟล์กำหนดค่า หากคุณไปที่หน้าแรกของ JENV มีบทช่วยสอนที่ดี
Pietro Di Bello

โพสต์นี้ควรสำหรับทุกคนที่กำลังมองหาคำตอบดังนั้นรายละเอียดเพิ่มเติมในโพสต์คาดว่าที่นี่จะถือว่าเป็นคำตอบที่สมบูรณ์และดี
Austin T French

ฉันเพิ่มข้อมูลเพิ่มเติมและขยายคำตอบเล็กน้อย ... หวังว่านี่จะดูดีขึ้นในตอนนี้ ขอบคุณสำหรับความคิดเห็น.
Pietro Di Bello

4

คุณไม่สามารถสลับระหว่างเวอร์ชัน Java ได้ ในเอกสารที่คุณเห็น:

สามารถติดตั้ง JRE ได้ครั้งละหนึ่งอันเท่านั้น ระบบจะไม่ติดตั้ง JRE ที่มีเวอร์ชันต่ำกว่าเวอร์ชั่นปัจจุบัน หากคุณต้องการติดตั้ง JRE เวอร์ชันที่ต่ำกว่าให้ถอนการติดตั้งเวอร์ชันปัจจุบันก่อน

หากคุณต้องการกลับไปเป็นเวอร์ชั่นที่เก่ากว่าคุณต้องถอนการติดตั้ง Java 8


ขอบคุณ grrr แต่สิ่งนี้ไม่ได้ช่วยให้ความเห็นของฉันเกี่ยวกับ OSX
แจ็กกี้

4
@ Jackie: จริงๆแล้วสิ่งนี้มีส่วนเกี่ยวข้องกับ OS X เพียงเล็กน้อย แต่มีมากขึ้นกับ Oracle ย้อนกลับไปเมื่อ Apple ดูแล JDK สำหรับ OS X มันเป็นเรื่องง่ายและสมบูรณ์เพื่อสลับระหว่างเวอร์ชัน Java ที่ใช้งาน โปรดตำหนิ Oracle สำหรับผู้ติดตั้งเส็งเคร็งไม่ใช่ OS X
Alessandro Vermeulen

@AlessandroVermeulen ด้วยความเคารพเนื่องจากไม่ใช่ "ตัวติดตั้ง" heck ฉันหวังว่ามันจะไม่ได้มาพร้อมกับรุ่นที่ติดตั้งล่วงหน้าเช่นกล่อง linux ของฉัน จากนั้นฉันก็สามารถ "ติดตั้ง" ได้แล้วฉันต้องการไบนารีของยูนิกซ์ แล้วก็มี OSX เวอร์ชั่นเก่าที่จำเป็นต้องใช้ในการบูตด้วยซ้ำ IMHO เป็นข้อตกลงที่ใช้ใน OSX ซึ่งทำให้เกิดปัญหา
Jackie

4
มีหลาย JDK ติดตั้งอย่างถูกต้องในเครื่องของฉันมันเป็นปลั๊กอินการตั้งค่าของ Oracles ที่ไม่อนุญาตให้เปลี่ยนจาก 1.8 เป็น 1.7 จากบรรทัดคำสั่งที่มีเส้นทางเต็มพวกเขาทำงานได้สำเร็จทั้งหมด / usr / libexec / java_home -V แสดงรายการทั้งหมด - และบานหน้าต่างการกำหนดค่าตามความชอบ Java 7 อนุญาตให้เลือก Java 7 JREs ได้
user151019

0

ฉันต้องการเสริมคำตอบของ @ nkadwa ข้อเสนอแนะของเขาทำงานได้ แต่หลังจากเปลี่ยน symlink สำหรับ CurrentSDK ด้วย ดังนั้นนี่คือรหัสแก้ไข:

setjdk() {
    export JAVA_HOME=$(/usr/libexec/java_home -v $1)
    sudo ln -nsf ${JAVA_HOME%/*} /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
}
setjdk 1.8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.