Điểm:0

Đường dẫn cho lệnh java được xác định trong Ubuntu ở đâu?

lá cờ si

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?

lá cờ hr
*"Tại sao hệ thống vẫn chấp nhận /usr/bin/java"* có thể vị trí vừa được trình bao của bạn lưu vào bộ đệm - xem ví dụ [Pytest nằm trong PATH nhưng không tìm thấy](https://askubuntu.com/ a/861386/178692)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.