Score:0

เส้นทางสำหรับคำสั่ง java กำหนดไว้ใน Ubuntu อยู่ที่ไหน

ธง si

ฉันกำลังดิ้นรนเพื่อให้ Ubuntu 20.04 รู้จักเวอร์ชันจาวาที่ถูกต้อง ฉันได้ตั้งค่าตัวแปรสภาพแวดล้อมที่ถูกต้องภายในเชลล์สคริปต์แล้ว /etc/profile.d/

ของฉัน $JAVA_HOME เอาท์พุท:

root@Ubuntu-2004-focal-64-minimal /etc/profile.d # echo $JAVA_HOME
/home/miw/java/jdk-15.0.2

.. สิ่งนี้ชี้ไปที่เวอร์ชันจาวาที่ถูกต้องที่ฉันต้องการใช้! (15.0.2)

นอกจากนี้ฉันได้ผนวกโฮมไดเร็กตอรี่นี้เข้ากับ my $เส้นทาง ตัวแปร:

root@Ubuntu-2004-focal-64-minimal /etc/profile.d # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/ miw/java/jdk-15.0.2

My Maven รู้จักเวอร์ชันอย่างถูกต้อง เนื่องจากใช้ตัวแปร $JAVA_HOME เพื่อกำหนดเวอร์ชัน

root@Ubuntu-2004-focal-64-minimal / # mvn -version
อาปาเช่ มาเวน 3.6.3
หน้าแรกของ Maven: /usr/share/maven
เวอร์ชัน Java: 15.0.2 ผู้จำหน่าย: Oracle Corporation รันไทม์: /home/miw/java/jdk-15.0.2

ตอนนี้: คำถามของฉันอยู่ที่ใดในกระบวนการเริ่มต้นหรือโดยทั่วไปแล้วไฟล์ใดที่เป็นค่าเริ่มต้น ชวา มีการกำหนดไดเร็กทอรีคำสั่ง ฉัน ไม่ต้องการ เป็นเพียงวิธีแก้ปัญหาของฉัน (เช่นโปรแกรมอัตโนมัติบางโปรแกรมที่ฉันสามารถสลับไปมาระหว่างทางเลือกอื่น ๆ เป็นต้น)

ระบบยังคงจดจำเวอร์ชันจาวาที่ติดตั้งไว้ล่วงหน้าซึ่งอยู่ภายใน /usr/lib/jvm/java-11-openjdk-amd64/bin เป็นค่าเริ่มต้น ... และถ้าฉันดูข้างใน /usr/bin ไดเร็กทอรีมีการเรียก symlink ชวา ซึ่งชี้ไปที่ /etc/ทางเลือก/java สัญลักษณ์ที่ชี้ไปที่ /usr/lib/jvm/java-11-openjdk-amd64/bin.

ฉันเดาต่อไปว่านี่เป็นเพราะ $เส้นทาง ลำดับชั้นตั้งแต่ /usr/bin ถูกกำหนดก่อนกำหนดเองของฉัน $JAVA_HOME.

ดี..ฉันพยายามลบ symlinks เหล่านั้นทั้งคู่ โดยหวังว่าระบบจะเข้าถึงสิ่งที่ฉันกำหนดเองในที่สุด $JAVA_HOME ไดเร็กทอรีในการค้นหา a ชวา เรียกใช้งานได้ .... สิ่งที่เกิดขึ้นตอนนี้คือเมื่อฉันพยายามแสดงเวอร์ชันจาวาเกิดข้อผิดพลาด:

root@Ubuntu-2004-focal-64-minimal /etc/alternatives # java -version
-bash: /usr/bin/java: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

แน่นอนว่าไม่มีอีกแล้วเพราะฉันลบไปแล้ว... ทำไมระบบถึงเอา /usr/bin/java เพื่อรับต่อไป ? ที่นี่ที่ไหน เส้นทางที่แน่นอน สำหรับ ชวา กำหนดคำสั่ง ?

ฉันยืนยันสิ่งนี้ด้วยการสร้าง symlink ของฉันเองภายใน /usr/bin ที่ชี้ไปยังไดเร็กทอรีที่กำหนดเองของฉัน.. และ tada..

root@Ubuntu-2004-focal-64-minimal /etc/alternatives # ln -s /home/miw/java/jdk-15.0.2/bin/java /usr/bin/java
root@Ubuntu-2004-focal-64-minimal /etc/alternatives # java -version
openjdk เวอร์ชัน "15.0.2" 2021-01-19
สภาพแวดล้อมรันไทม์ OpenJDK (รุ่น 15.0.2+7-27)
OpenJDK 64-Bit Server VM (รุ่น 15.0.2+7-27, โหมดผสม, การแชร์)

ใครช่วยอธิบายให้ฉันฟังหน่อยได้ไหมว่าเกิดอะไรขึ้นที่นี่ ทำไมระบบถึงคิดอย่างนั้น /usr/bin/java ต้องเป็นตำแหน่งที่พบคำสั่ง java หรือไม่ สิ่งนี้ทำลายจุดประสงค์ของ $เส้นทาง ตัวแปรในตอนแรก ! ฉันไม่ได้อะไรที่นี่?

hr flag
*"เหตุใดระบบจึงใช้ /usr/bin/java เพื่อรับสิทธิ์อยู่ดี"* อาจเป็นตำแหน่งที่เชลล์ของคุณแคชไว้ - ดูตัวอย่าง [Pytest อยู่ใน PATH แต่ไม่พบ](https://askubuntu.com/ a/861386/178692)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา