Tôi đang cố gắng để Ubuntu 20.04 của mình nhận ra phiên bản java chính xác. Tôi đã đặt đúng biến môi trường bên trong tập lệnh shell trong /etc/profile.d/
Của tôi $JAVA_HOME
đầu ra:
root@Ubuntu-2004-focal-64-minimal /etc/profile.d # echo $Java_HOME
/home/miw/java/jdk-15.0.2
.. điều này trỏ đến phiên bản java chính xác mà tôi muốn sử dụng! (15.0.2)
Hơn nữa, tôi đã thêm thư mục chính này vào $PATH
Biến đổi:
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
Maven của tôi nhận dạng chính xác phiên bản vì nó sử dụng biến $Java_HOME để xác định phiên bản.
root@Ubuntu-2004-focal-64-minimal / # mvn -version
Apache Maven 3.6.3
Trang chủ Maven: /usr/share/maven
Phiên bản Java: 15.0.2, nhà cung cấp: Oracle Corporation, thời gian chạy: /home/miw/java/jdk-15.0.2
Hiện nay:
Câu hỏi của tôi là ở đâu trong quy trình khởi động hoặc nói chung là tệp nào mặc định java
thư mục lệnh được xác định. Tôi KHÔNG MUỐN chỉ là một giải pháp cho vấn đề của tôi. (như một số chương trình tự động nơi tôi có thể chuyển đổi giữa các lựa chọn thay thế, v.v.)
Hệ thống bằng cách nào đó vẫn nhận ra phiên bản java được cài đặt sẵn bên trong /usr/lib/jvm/java-11-openjdk-AMD64/bin
như mặc định của nó... và thực sự nếu tôi nhìn vào bên trong /usr/bin
thư mục có một liên kết tượng trưng gọi là java
mà chỉ đến /etc/alternatives/java
liên kết tượng trưng trỏ đến /usr/lib/jvm/java-11-openjdk-AMD64/bin
.
Dự đoán tiếp theo của tôi là điều này là do $PATH
phân cấp kể từ /usr/bin
được xác định TRƯỚC tùy chỉnh của tôi $JAVA_HOME
.
Tốt..tôi đã thử xóa cả hai liên kết tượng trưng đó, hy vọng rằng hệ thống cuối cùng sẽ đạt được tùy chỉnh của tôi $JAVA_HOME
thư mục tìm kiếm một java
có thể thực thi được.... điều xảy ra bây giờ là khi tôi cố gắng hiển thị phiên bản java thì xảy ra lỗi:
root@Ubuntu-2004-focal-64-minimal /etc/alternatives # java -version
-bash: /usr/bin/java: Không có tệp hoặc thư mục như vậy
Tất nhiên là nó không còn ở đó nữa vì tôi đã xóa nó ...
Tại sao hệ thống lấy /usr/bin/java
cho dù sao? Đây là đâu đường dẫn chính xác cho java
lệnh được xác định?
Tôi đã xác minh điều này bằng cách tạo liên kết tượng trưng của riêng mình bên trong /usr/bin
trỏ đến thư mục tùy chỉnh của tôi .. và 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
phiên bản openjdk "15.0.2" 2021-01-19
Môi trường thời gian chạy OpenJDK (bản dựng 15.0.2+7-27)
OpenJDK 64-Bit Server VM (bản dựng 15.0.2+7-27, chế độ hỗn hợp, chia sẻ)
Vì vậy, bất cứ ai có thể giải thích cho tôi những gì thực sự xảy ra ở đây? Tại sao hệ thống giả định rằng /usr/bin/java
PHẢI là nơi lệnh java được tìm thấy? Điều này bằng cách nào đó phá hủy mục đích của $PATH
biến ngay từ đầu! Tôi không nhận được gì ở đây?