ฉันกำลังดิ้นรนเพื่อให้ 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 หรือไม่ สิ่งนี้ทำลายจุดประสงค์ของ $เส้นทาง
ตัวแปรในตอนแรก ! ฉันไม่ได้อะไรที่นี่?