ฉันควรตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME บน macOS X 10.6 อย่างไร


436

แอ็พพลิเคชัน Java จำนวนมากที่ใช้เชลล์สคริปต์เพื่อกำหนดค่าสภาวะแวดล้อมใช้JAVA_HOMEตัวแปรสภาวะแวดล้อมเพื่อเริ่มต้นเวอร์ชัน Java ที่ถูกต้องค้นหา JRE JARs และอื่น ๆ

ใน macOS X 10.6 เส้นทางต่อไปนี้ดูเหมือนจะใช้ได้กับตัวแปรนี้

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

สิ่งเหล่านี้บางส่วนเป็น symlink ไปยัง VM ปัจจุบันจริง (ตามที่กำหนดในบานหน้าต่าง Java Preference)

แต่ควรจะใช้อันไหนดี - หรือว่าจะใช้ได้ล่ะ?


คำตอบ:


849

ฉันเพิ่งตั้งค่าJAVA_HOMEผลลัพธ์ของคำสั่งนั้นซึ่งจะให้เส้นทาง Java ที่ระบุไว้ในการตั้งค่า Java ของคุณ นี่เป็นตัวอย่างจาก.bashrcไฟล์ของฉันซึ่งตั้งค่าตัวแปรนี้:

export JAVA_HOME=$(/usr/libexec/java_home)

ฉันไม่ได้ประสบปัญหาใด ๆ กับเทคนิคนั้น

บางครั้งฉันต้องเปลี่ยนค่าJAVA_HOMEของ Java รุ่นก่อนหน้า ตัวอย่างเช่นโปรแกรมหนึ่งที่ฉันต้องการต้องใช้ Java 5 แบบ 32 บิตบน OS X ดังนั้นเมื่อใช้โปรแกรมนั้นฉันตั้งค่าJAVA_HOMEโดยเรียกใช้:

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

สำหรับบรรดาของคุณที่ไม่ได้java_homeอยู่ในเส้นทางของคุณเพิ่มมันเช่นนี้

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

การอ้างอิง :


20
Mountain Lion มีให้เช่นกัน
sghill

57
ยังคงใช้ได้สำหรับ Mavericks
Pascal

42
ยังคงใช้ได้สำหรับโยเซมิตี ;)
Geoffrey Wiseman

42
El capitan ตรวจสอบ!
gattshjoty

11
ยังใช้ได้สำหรับ Mojave
Keuha

40

นอกจากนี้ยังเป็นเรื่องที่น่าสนใจในการตั้งค่า PATH ของคุณเพื่อสะท้อน JDK หลังจากเพิ่ม JAVA_HOME (ซึ่งสามารถทำได้ด้วยตัวอย่างที่อ้างถึงโดย 'mipadi'):

export JAVA_HOME=$(/usr/libexec/java_home)

เพิ่มใน ~ / .profile:

export PATH=${JAVA_HOME}/bin:$PATH

PS:สำหรับ OSX โดยทั่วไปฉันใช้. profile ใน HOME dir แทนที่จะเป็น. bashrc


สำหรับ OSX ทำงานทุบตีเริ่มต้นผมมักใช้ทุบตี.bash_profile- ทำไมคุณใช้กว่าทั่วไป.profile?
LeeGee

1
ตั้งแต่.profileเป็นทั่วไปก็จะทำงานร่วมกับshหรือbashในขณะที่เป็นเอกสิทธิ์.bash_profile bashนอกจากนี้แยกการตั้งค่าจากปพลิเคชันที่ใช้งานเช่น.bash_profile MacPortsแต่คุณสามารถใช้สองอย่างปลอดภัย ดูเพิ่มเติมเกี่ยวกับที่นี่
lucasarruda

1
- FYI, ลิงก์ที่คุณให้ยืนยันความสงสัยของฉันที่อยู่ภายใต้การทุบตี (เช่นค่าเริ่มต้น) การใช้งานของการแทนที่.bash_profile .profile
LeeGee

@LeeGee ใช่และมันเป็นเช่นนั้นเพราะ.bash_profileมีความเฉพาะเจาะจงในขณะที่.profileเป็นเรื่องทั่วไปสำหรับทุกshรูปแบบ
lucasarruda

1
เนื่องจาก OS / X วางลิงค์ไว้javaในของคุณ/usr/binจึงไม่จำเป็นต้องเพิ่ม$JAVA_HOMEเส้นทางของคุณอย่างชัดเจน
Zac

20

ฉันมีMac OS X (เซียร์) 10.12.2

ฉันตั้งค่าJAVA_HOMEให้ทำงานกับReact Native (สำหรับแอป Android) โดยทำตามขั้นตอนต่อไปนี้

  • เปิดเทอร์มินัล (Command + R พิมพ์เทอร์มินัลกด ENTER)

  • เพิ่มบรรทัดต่อไปนี้~ / .bash_profile export JAVA_HOME=$(/usr/libexec/java_home)

  • ตอนนี้รันคำสั่งต่อไปนี้ source ~/.bash_profile

  • คุณสามารถตรวจสอบค่าที่แน่นอนของJAVA_HOMEโดยพิมพ์คำสั่งต่อไปนี้ echo $JAVA_HOME

ค่า (เอาต์พุต) ที่ส่งคืนจะเป็นดังนี้ /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

แค่นั้นแหละ.


สิ่งนี้มีประโยชน์ขอบคุณ แต่ฉันเชื่อว่าคุณพลาดขั้นตอนสุดท้ายซึ่งรวมไปถึงการตั้งค่า JAVA_HOME เป็นค่าที่ส่งคืนใน. bashrc / .bash_profile / .zshrc / ฯลฯ โปรดแก้ไขฉันหากฉันเข้าใจผิด
TheProletariat

2
มันไม่จำเป็น ในกรณีของฉัน$JAVA_HOMEอ้างอิง$(/usr/libexec/java_home)และ$(/usr/libexec/java_home) ถูกอ้างอิงภายใน/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Homeโดยระบบ
hygull

1
เข้าใจแล้ว มันจำเป็นในกรณีของฉัน ขอบคุณ
TheProletariat

14

ฉันใช้ Mac OS 10.6.8

ทางออกที่ง่ายที่สุดสำหรับฉันก็แค่ใส่เข้าไป

$ export JAVA_HOME=$(/usr/libexec/java_home)

เพื่อทดสอบว่ามันใช้งานได้หรือไม่ใส่

$ echo $JAVA_HOME

มันแสดงให้เห็น

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

คุณสามารถทดสอบ

$ which java


9

/Library/Java/Homeฉันมักจะใช้ วิธีการทำงานของบานหน้าต่างการตั้งค่านี้ควรทันสมัยกับรุ่นที่คุณต้องการ


/ bin และตรวจสอบว่าชี้ไปที่ / Library / java และไม่ใช่ / System / Library / .. เนื่องจากไฟล์นั้นอาจล้าสมัย
JRun

1
สิ่งนี้ไม่ถูกต้องอีกต่อไป บน OS X 10.5 ขึ้นไปให้ใช้ / usr / libexec / java_home เพื่อค้นหาพา ธ
Kristopher Johnson

8

สิ่งที่กล่าวมาข้างต้นไม่สามารถใช้งานได้อีกในโยเซมิตีสำหรับการใช้งานกราฟิก! ชอบ eclipse หรืออะไรก็ตามที่เริ่มต้นด้วย Spotlight (.bash_profile, launchd.conf ใช้ได้กับเทอร์มินัลเซสชันเท่านั้น) ก่อนเริ่ม eclipse เพียงเปิดหน้าต่างเทอร์มินัลและให้คำสั่งต่อไปนี้:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(ด้วยพา ธ การติดตั้งของคุณ! อาจใช้ได้กับ $ (/ usr / libexec / java_home) แทนพา ธ แบบเต็มเช่นกัน)

ดูบทความที่ยอดเยี่ยมทั้งหมดเกี่ยวกับโซลูชันถาวรที่นี่: การตั้งค่าตัวแปรสภาพแวดล้อมผ่าน launchd.conf ไม่ทำงานใน OS X Yosemite / El Capitan / macOS Sierra อีกต่อไป


2

ฉันพบสแต็กนี้เพื่อช่วยฉันมีปัญหาเดียวกันและฉันสามารถแก้ไข:

เส้นทาง Java ของฉันอยู่ที่นี่:

/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

และจำเป็นต้องใส่ลงในของฉัน.bash_profile:

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

หวังว่าจะช่วย


2

ข้ามการตั้งค่าเทอร์มินัลเนื่องจากคุณกล่าวถึงแอปพลิเคชันการตั้งค่าตัวแปรสภาพแวดล้อมระบบถาวร (ใช้งานได้กับ macOS Sierra ควรทำงานกับ El Capitan ด้วย):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(สิ่งนี้จะทำให้ JAVA_HOME เป็น 1.8 JDK ล่าสุดโอกาสที่คุณจะได้รับการอัพเดทเซิร์ฟเวอร์เช่น javac 1.8.0_101, javac 1.8.0_131)
แน่นอนเปลี่ยน 1.8 เป็น 1.7 หรือ 1.6 (จริง ๆ ) เพื่อให้เหมาะกับความต้องการและระบบของคุณ


1

ในฐานะที่เป็นคำตอบอื่น ๆ ทราบวิธีที่ถูกต้องในการค้นหาไดเรกทอรีบ้าน Java /usr/libexec/java_homeคือการใช้งาน

เอกสารอย่างเป็นทางการสำหรับสิ่งนี้อยู่ในQ&A ด้านเทคนิคของ Apple QA1170: ไดเรกทอรี Java ที่สำคัญบน OS X : https://developer.apple.com/library/mac/qa/qa1170/_index.html


นี่คือสิ่งที่ซ้ำกัน!
Franklin Yu

ฉันคิดว่าการรวมลิงค์ไปยังเอกสารทางการของ Apple ทำให้ไม่ซ้ำซ้อน แต่ถ้าเป็นเช่นนั้นการกระทำที่ถูกต้องคือการตั้งค่าสถานะเป็นซ้ำไม่ได้แสดงความคิดเห็น
Kristopher Johnson

ฉันแสดงความคิดเห็นเพราะฉันไม่สามารถทำเครื่องหมายคำตอบว่าซ้ำกันได้ Stack Overflow อนุญาตให้ผู้ใช้ทำเครื่องหมายคำถามว่าซ้ำกันเท่านั้น (น่าเสียดาย) ลิงค์นี้มีประโยชน์ แต่ฉันคิดว่าความคิดเห็นเกี่ยวกับคำตอบปัจจุบัน (หรือเพียงแค่แก้ไขด้วยลิงก์เนื่องจากคุณมีความสามารถอยู่แล้ว) จะดีกว่าเนื่องจากจะเน้นข้อมูลที่มีประโยชน์ทั้งหมดในคำตอบเดียว ฉันเชื่อว่ามีคำแนะนำที่ไหนสักแห่งที่ Stack Overflow ชอบแก้ไขคำตอบปัจจุบันมากกว่าการเขียนคำตอบใหม่
Franklin Yu

1

สำหรับฉัน Maven ดูเหมือนว่าจะทำงานนอก.mavenrcไฟล์:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

ฉันแน่ใจว่าฉันหยิบมันขึ้นมาด้วยดังนั้นก็จำไม่ได้ว่าอยู่ที่ไหน


1

สร้างไฟล์ ~/.mavenrc

จากนั้นวางสิ่งนี้ลงในไฟล์

export JAVA_HOME=$(/usr/libexec/java_home)

ทดสอบ

mvn -v


ฉันชอบวิธีการนี้เพราะช่วยให้ฉันเปลี่ยนรุ่น Java ได้ง่ายมากภายในไฟล์. mavenrc
Spindizzy

1

ขอแนะนำให้ตรวจสอบเทอร์มินัลเชลล์เริ่มต้นก่อนตั้งค่าตัวแปรสภาพแวดล้อมJAVA_HOMEผ่านคำสั่งต่อไปนี้:

$ echo $SHELL
/bin/bash

หากเทอร์มินัลเริ่มต้นของคุณคือ/ bin / bash (Bash) คุณควรใช้วิธีการ@hygull

หากเทอร์มินัลเริ่มต้นของคุณคือ/ bin / zsh (Z Shell) คุณควรตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ในไฟล์~ / .zshenvด้วยเนื้อหาดังต่อไปนี้:

export JAVA_HOME="$(/usr/libexec/java_home)"

ประเภทเทอร์มินัลอื่น ๆ ที่ไม่ได้กล่าวถึงข้างต้นคุณควรตั้งค่าตัวแปรสภาพแวดล้อมในไฟล์เทอร์มินัล env ที่เกี่ยวข้อง

วิธีการนี้จะทดสอบการทำงานในMacOS ซ้อมเวอร์ชัน 10.14.6


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