วิธีตั้งค่า JAVA_HOME ใน Linux สำหรับผู้ใช้ทั้งหมด


185

ฉันใหม่สำหรับระบบ Linux และดูเหมือนจะมีโฟลเดอร์ Java มากเกินไป

java -version ให้ฉัน:

  • รุ่น java "1.7.0_55"
  • สภาพแวดล้อมรันไทม์ OpenJDK (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK เซิร์ฟเวอร์ 64 บิต VM (สร้าง 24.51-b03, โหมดผสม)

เมื่อฉันพยายามสร้างโครงการ Maven ฉันได้รับข้อผิดพลาด:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

คุณช่วยบอกฉันได้ไหมว่าไฟล์ใดบ้างที่ฉันต้องแก้ไขสำหรับผู้ใช้ root เช่นเดียวกับผู้ใช้ที่ไม่ใช่รูท

คำตอบ:


353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    เพิ่ม sudo ถ้าเข้าสู่ระบบในฐานะผู้ใช้ที่ไม่มีสิทธิ์เช่น sudo vim

  3. กด 'i' เพื่อเข้าสู่โหมดแทรก
  4. เพิ่ม:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. ออกจากระบบและเข้าสู่ระบบอีกครั้งรีบูตหรือใช้source /etc/profileเพื่อใช้การเปลี่ยนแปลงทันทีในเปลือกปัจจุบันของคุณ

29
อย่าลืมลบเครื่องหมายคำพูดคู่และสร้างมันขึ้นมาใหม่จากคีย์บอร์ดของคุณเพราะการคัดลอกและวางเท่านั้นอาจสร้างปัญหาได้
Sunil Kumar

12
@rbaleksandar แอปพลิเคชั่นบางตัวขึ้นอยู่กับJAVA_HOMEว่าจะไม่สร้างความเสียหาย
raffian

2
IntelliJ เป็นแอปพลิเคชั่นดังกล่าวและไม่ใช่รุ่นรอง
Pete

12
คุณต้องดำเนินsource /etc/profileการเพื่อให้การเปลี่ยนแปลงมีผลทันทีเช่นกัน!
Mohamed Taher Alrefaie

1
สิ่งนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้อง อันที่จริงมีกลิ่นเหม็นที่/etc/profile.d/jdk.shลอยอยู่รอบ ๆ ในระบบของฉัน
Hermann

109

สำหรับผู้ใช้ทั้งหมดฉันขอแนะนำให้วางบรรทัดต่อไปนี้ /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

สิ่งนี้จะอัปเดตแบบไดนามิกและทำงานได้ดีกับระบบทางเลือก โปรดทราบว่าการอัปเดตจะเกิดขึ้นในล็อกอินเชลล์ใหม่เท่านั้น


10
เพื่อให้สอดคล้องกับการใช้ JRE ธรรมดา (แม้กระทั่งหัวขาด) export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")แทน - โปรดสังเกตว่าฉันใช้แค่javaไม่ใช่javac
Roman Kruglov

@occulta อย่างน้อยMavenคาดว่า JAVA_HOME จะชี้ไปที่ JDK และใช้เพื่อค้นหาคอมไพเลอร์ java
Eero Aaltonen

1
โหวตreadlinkและอัปเดตโซลูชันที่เข้ากันได้กับอัพเกรดแม้นี่จะเป็นเธรดอายุ 5 ปี ฉันขอแนะนำไม่ให้แก้ไข / etc / profile แต่ส่งออกของคุณในไฟล์ที่กำหนดเองเช่น/etc/profile.d/java_environment.shบางทีคุณอาจต้องchmod +x java_environment.shรีบูต
ChristophS

สมบูรณ์ ดีกว่าdirnameวิธีแก้ปัญหาclunky ของฉัน หากคุณเป็นเหมือนฉันและต้องการที่จะเข้าใจสิ่งที่เกิดขึ้นที่นี่นี่เป็นการแทนที่ข้อความที่ตรงกันจากอินพุตด้วยสตริงว่าง อักขระ "ค่าเริ่มต้น" สำหรับการเปลี่ยนคือ/แต่ตราบใดที่คุณมีความสอดคล้องคุณสามารถแทนที่/ด้วยสิ่งใดก็ได้ ในกรณีนี้มันเป็นเครื่องหมายทวิภาคที่เราใช้/สำหรับตัวคั่นเส้นทาง
Ungeheuer

35

คุณสามารถใช้ / etc / profile หรือดีกว่าไฟล์เช่น /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

คุณต้องจำไว้ว่าไฟล์นี้ถูกโหลดด้วยเชลล์ล็อกอินใหม่เท่านั้นดังนั้นหลังจาก bash -l หรือ gnome-session ใหม่และมันไม่เปลี่ยนกับ Java เวอร์ชันใหม่


1
อย่างน้อยใน linux ของฉัน (raspbian), / etc / profile จะแหล่งที่มา/etc/profile.d/*.shดังนั้นไฟล์ของคุณจะต้องถูกเรียกjdk_home.shเพื่อที่จะได้รับที่มา
Hilikus

ขอบคุณ @Hilikus :-) ฉันเปลี่ยนมันตามนั้น
flob

2
ขอบคุณ. ฉันไม่ผสมของคุณและคำตอบ @ Eero ของที่ดีที่สุดของโลกทั้งสอง;)
Hilikus

1
นี่คือคำตอบที่ดีที่สุด
ยาโคบ

/etc/profile.d/jdk_home.shเป็นคำตอบที่สะอาดมากขึ้นอย่างน้อยสำหรับอูบุนตู , /etc/profileเป็น clumped กับตรรกะมากแล้ว ดูเหมือนจะไม่ฉลาดที่จะเพิ่มลงไปอีก ...
อึ้ง

30

ไม่มีคำตอบอื่นใดที่ "เกาะติด" สำหรับฉันใน RHEL 7 แม้จะตั้งค่าJAVA_HOMEและPATHเข้า/etc/profileหรือ~/.bash_profileไม่ทำงานโดยตรง ทุกครั้งที่ฉันพยายามตรวจสอบว่าJAVA_HOMEมีการตั้งค่าหรือไม่มันจะว่างเปล่า:

$ echo $JAVA_HOME
    (<-- no output)

สิ่งที่ฉันต้องทำคือตั้งค่าสคริปต์ใน/etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

ฉันเริ่มละเลยบรรทัดแรก ( #!/bin/sh) และมันจะไม่ทำงานหากไม่มีมัน

ตอนนี้มันทำงาน:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

ฉันมีประสบการณ์เดียวกันกับ RHEL 7 ฉันลบการส่งออกจาก ~ / .bash_profile และใช้วิธีนี้
xpagesbeast

#! / bin / sh ไม่จำเป็นใน jdk_home.sh ของคุณ เมื่อคุณตั้งค่าเรียบร้อยแล้วให้ออกจากระบบและลงชื่อเข้าใช้อีกครั้ง
kuhajeyan

12

มันง่ายมากในการตั้งค่าพา ธ ใน Linux ทำดังนี้:

Step-1เปิดเทอร์มินัลแล้วพิมพ์ sudo gedit .bashrc

ขั้นตอนที่ 2มันจะถามรหัสผ่านของคุณ หลังจากพิมพ์รหัสผ่านมันจะเปิดไฟล์ bash จากนั้นไปที่จุดสิ้นสุดและพิมพ์ด้านล่าง

ขั้นตอนที่ 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

ขั้นตอนที่ 4 จากนั้นบันทึกไฟล์และออกจากไฟล์

ด้านบนสำหรับผู้ใช้คนเดียว สำหรับผู้ใช้ทั้งหมดคุณต้องทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1 gedit /etc/profile

ขั้นตอนที่ 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

ขั้นตอนที่ 3 export PATH=$PATH:$JAVA_HOME/bin

หวังว่านี่จะช่วยได้ ขอบคุณ!


2
คำตอบนี้ตั้งไว้สำหรับผู้ใช้ปัจจุบันเท่านั้น
Manuel Manhart

ขอบคุณ @ickyrr
PyDevSRS

7

ทำในสิ่งที่ Oracle ทำ (ในฐานะอดีตพนักงานซันฉันไม่คุ้นเคยกับสิ่งนั้น)

ln -s latestJavaRelease / usr / java / default
โดยที่ latestJavaRelease เป็นเวอร์ชันที่คุณต้องการใช้

จากนั้นเอ็กซ์พอร์ต JAVA_HOME = / usr / java / default


6

คำตอบที่ได้รับการโพสต์ก่อนหน้านี้ถูกต้อง แต่ไม่มีคำตอบเดียวที่สมบูรณ์เกี่ยวกับ:

  1. ไม่แนะนำให้เปลี่ยน / etc / profile เนื่องจากเหตุผล (ตามที่ระบุไว้ใน / etc / profile):
  • คุณไม่ควรเปลี่ยนไฟล์นี้จนกว่าคุณจะรู้ว่ากำลังทำอะไรอยู่ จะดีกว่ามากในการสร้างเชลล์สคริปต์ custom.sh ใน /etc/profile.d/ เพื่อทำการเปลี่ยนแปลงที่กำหนดเองกับสภาพแวดล้อมของคุณเนื่องจากจะป้องกันไม่ให้ต้องรวมในการอัปเดตในอนาคต *
  1. ดังนั้นตามที่ระบุไว้ข้างต้นสร้างไฟล์ /etc/profile.d/custom.sh สำหรับการเปลี่ยนแปลงที่กำหนดเอง

  2. ตอนนี้เพื่อให้อัปเดตอยู่เสมอด้วย Java เวอร์ชันใหม่กว่าที่ติดตั้งอย่าใส่พา ธ สัมบูรณ์แทนการใช้:

#if ทำให้ jdk เป็นบ้านของ java

ส่งออก JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

หรือ

#if ทำให้ jre เป็นบ้านของ java

ส่งออก JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. และอย่าลืมมี#! / bin / bashบนไฟล์ custom.sh

4

คัดลอกพา ธ ไฟล์ bin ที่คุณติดตั้ง

YOUR PATH

เปิดเทอร์มินัลและแก้ไขไฟล์สภาพแวดล้อมโดยพิมพ์คำสั่งต่อไปนี้

sudo nano /etc/environment

ในไฟล์นี้เพิ่มบรรทัดต่อไปนี้ (แทนที่YOUR_PATHด้วยพา ธ ที่เพิ่งคัดลอก):

JAVA_HOME="YOUR_PATH"

นั่นควรจะเพียงพอที่จะตั้งค่าตัวแปรสภาพแวดล้อม ตอนนี้โหลดไฟล์นี้อีกครั้ง:

source /etc/environment

ตอนนี้ทดสอบโดยดำเนินการ:

echo $JAVA_HOME

3
ผล olny เซสชั่นขั้วปัจจุบัน
Fatih Türker

@ FatihTürkerรีบูทพีซีของคุณ
Jack Giffin

สำหรับฉันที่ใช้ jdk11 YOUR_PATH คือ/usr/lib/jvm/default-java/
Jack Giffin

มีการตั้งค่าพา ธ JAVA_HOME แต่ไม่สามารถใช้งานได้ ie java ไม่ทำงาน แม้หลังจากรีบูต
Ssenyonjo

2

บน Linux ฉันเพิ่มบรรทัดนี้ใน ~ / .profile ของฉัน:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
ดูเหมือนว่าอาจเป็นคำตอบที่ถูกต้อง แต่คุณสามารถอธิบายได้ว่าทำไมมันถึงทำงานได้เช่นว่ามันทำอะไรและปัญหาของ OP คืออะไร? นอกจากนี้คุณยังพูดว่า "บน Linux" แต่มี distro Linux ที่แตกต่างกันมากมายและมันอาจไม่ทำงานสำหรับพวกเขาทั้งหมดโปรดเพิ่ม distro ที่ใช้งานได้
Buurman

2

นี่เป็นสคริปต์ที่ง่ายมากในการแก้ปัญหา

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

และสำหรับการทดสอบ:

echo $JAVA_HOME

2

ขั้นตอนที่ 1 - ตรวจสอบจาวาเวอร์ชันปัจจุบันโดย "echo $ JAVA_HOME"

ขั้นตอนที่ 2 - เป็นกลุ่ม / etc / profile

ขั้นตอนที่ 3 - ในตอนท้ายของไฟล์คุณจะได้พบกับการส่งออก JAVA_HOME เราจำเป็นต้องระบุเส้นทางใหม่ที่นี่ตรวจสอบให้แน่ใจว่ามันไม่สัมพันธ์กัน

ขั้นตอนที่ 4 - บันทึกและออก: wq

ขั้นตอนที่ 5 - "source / etc / profile /" สิ่งนี้จะดำเนินการเปลี่ยนแปลง

ขั้นตอนที่ 6 - ทำ echo $ JAVA_HOME อีกครั้ง - การเปลี่ยนแปลงจะสะท้อนให้เห็น


2

1 ... ใช้ปุ่มลัดCtlr+ Alt+ Tเพื่อเปิดเทอร์มินัล

2 ... ดำเนินการคำสั่งด้านล่าง:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (แนะนำ) รีสตาร์ท VM / คอมพิวเตอร์ของคุณ คุณสามารถใช้source /etc/sourceหากไม่ต้องการรีสตาร์ทคอมพิวเตอร์

4 ... ใช้ short cut Ctlr+ Alt+ Tเพื่อเปิด terminal

5 ... ยืนยันการผ่อนชำระ JAVA_HOME ด้วย

echo $JAVA_HOME

หนึ่งซับสำเนาจากflobเครดิตให้พวกเขา



1

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

อย่างใดอย่างหนึ่ง: แหล่งที่มา / etc / หรือ / etc /

โปรไฟล์ใดที่คุณแก้ไขอยู่ที่ไหน


1

ในขณะที่เรากำลังตั้งค่า JAVA_HOME ให้ฉันแบ่งปันประโยชน์บางอย่างของการตั้งค่า JAVA_HOME หรือตัวแปรสภาพแวดล้อมอื่น ๆ :

1) อัพเกรด JDK ได้ง่ายโดยไม่กระทบกับการเริ่มต้นใช้งานแอปพลิเคชันและไฟล์กำหนดค่าซึ่งชี้ไปที่ JAVA_HOME คุณต้องดาวน์โหลดเวอร์ชันใหม่และตรวจสอบให้แน่ใจว่า JAVA_HOME ชี้ไปที่ Java เวอร์ชันใหม่ นี่คือประโยชน์ที่ดีที่สุดของการใช้ตัวแปรสภาพแวดล้อมหรือลิงค์

2) ตัวแปร JAVA_HOME สั้นและกระชับแทนที่จะเป็นพา ธ แบบเต็มไปยังไดเรกทอรีการติดตั้ง JDK

3) ตัวแปร JAVA_HOME เป็นแพลตฟอร์มอิสระเช่นหากสคริปต์เริ่มต้นของคุณใช้ JAVA_HOME ดังนั้นมันสามารถทำงานบน Windows และ UNIX โดยไม่มีการดัดแปลงใด ๆ คุณเพียงแค่ตั้งค่า JAVA_HOME ในระบบปฏิบัติการที่เกี่ยวข้อง

อ่านเพิ่มเติม: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

การโพสต์เป็นคำตอบเนื่องจากฉันไม่มีสิทธิ์แสดงความคิดเห็น

ชี้ไปที่หมายเหตุ : ทำตามคำตอบที่ยอมรับซึ่งโพสต์โดย "That Dave Guy"

หลังจากตั้งค่าตัวแปรตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าการอนุญาตที่เหมาะสมให้กับไดเร็กทอรี java ที่ติดตั้งไว้

chmod -R 755 /usr/java

1

ขั้นตอนการปฏิบัติงานทั้งหมด (การค้นหา java, parent dir, ไฟล์การแก้ไข, ... )

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

ผลลัพธ์:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

คำอธิบาย:

1) ลองแบ่งคำสั่งเต็ม ๆ ออกเป็นชิ้น ๆ

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) ค้นหาเส้นทาง java จากคำสั่ง java

# $(which java)
"/usr/bin/java"

3) รับเส้นทางสัมพัทธ์จากเส้นทางสัญลักษณ์

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) รับพาเรนต์ของ /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) รับพาเรนต์ของ /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

เปิดkafka-run-class.shด้วย sudo เพื่อเขียน

คุณสามารถค้นหาkafka-run-class.shในโฟลเดอร์ kafka ของคุณ: kafka / bin / kafka-run-class.sh

ตรวจสอบบรรทัดเหล่านี้

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไขตัวแปร JAVA ในส่วนอื่นเพื่อให้ชี้ไปที่ปฏิบัติการจาวาใน java / bin ของคุณ like JAVA = "$ JAVA_HOME / java"


0

ใน / etc / profile หากคุณเปิดขึ้นมาคุณจะได้รับรู้ว่าไม่แนะนำให้เขียนไฟล์นั้น แทนที่จะทำสคริปต์คำสั่งของคุณ (สมมติว่า test.sh) ไปที่โฟลเดอร์ /etc/profile.d และวาง test.sh ไว้ที่นั่น ทุกครั้งที่คุณรีบูตเครื่องจะถูกเรียกโดยอัตโนมัติโดย / etc / profile


-1

ฉันใช้สาย:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

เป็น my ~ / .profile ดังนั้นจึงใช้ฐานของไดเรกทอรี java เริ่มต้นในเวลาล็อกอิน นี่คือทุบตี

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