Puncte:0

Unde este calea pentru comanda java definită în Ubuntu?

drapel si

Mă chinui să-mi fac Ubuntu 20.04 să recunoască versiunea java corectă. Am setat variabila de mediu corectă într-un script shell în /etc/profile.d/

Ale mele $JAVA_HOME ieșire:

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

.. acest lucru indică versiunea java corectă pe care vreau să o folosesc! (15.0.2)

În plus, am atașat acest director de acasă la mine $PATH variabil:

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 recunoaște corect versiunea, deoarece folosește variabila $JAVA_HOME pentru a determina versiunea.

root@Ubuntu-2004-focal-64-minimal / # mvn -versiune
Apache Maven 3.6.3
Acasă Maven: /usr/share/maven
Versiunea Java: 15.0.2, furnizor: Oracle Corporation, timp de rulare: /home/miw/java/jdk-15.0.2

Acum: Întrebarea mea este unde în interiorul procesului de pornire sau, în general, în ce fișier este implicit java directorul de comenzi este definit. eu NU VREAU doar o solutie la problema mea. (ca unele programe automate în care pot comuta între alternative etc.)

Sistemul recunoaște cumva versiunea java preinstalată aflată în interior /usr/lib/jvm/java-11-openjdk-amd64/bin ca implicit... și într-adevăr dacă arunc o privire în interiorul /usr/bin directorul există un link simbolic numit java care indică spre /etc/alternatives/java link-ul simbolic care indică /usr/lib/jvm/java-11-openjdk-amd64/bin.

Următoarea mea presupunere a fost că acest lucru se datorează $PATH ierarhie din moment ce /usr/bin este definit ÎNAINTE de obiceiul meu $JAVA_HOME.

Bine..Am încercat să șterg acele legături simbolice pe ambele, în speranța că sistemul va ajunge în sfârșit la obiceiul meu $JAVA_HOME director în căutarea unui java executabil.... ceea ce se întâmplă acum este că atunci când încerc să arăt versiunea java apare o eroare:

root@Ubuntu-2004-focal-64-minimal /etc/alternatives # java -version
-bash: /usr/bin/java: Nu există un astfel de fișier sau director

Bineînțeles că nu mai este acolo pentru că l-am șters... De ce sistemul ia /usr/bin/java de acord oricum? Unde este asta calea exacta pentru java comanda definita?

Am verificat acest lucru creându-mi propriul link simbolic în interior /usr/bin care indică directorul meu personalizat.. și 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
Versiunea openjdk „15.0.2” 2021-01-19
OpenJDK Runtime Environment (build 15.0.2+7-27)
OpenJDK Server VM pe 64 de biți (build 15.0.2+7-27, mod mixt, partajare)

Deci poate cineva să-mi explice ce s-a întâmplat de fapt aici? De ce sistemul presupune asta /usr/bin/java TREBUIE să fie unde se găsește comanda java? Acest lucru distruge cumva scopul $PATH variabilă în primul rând! Ce nu ajung aici?

drapel hr
*„De ce oricum ia sistemul /usr/bin/java ca de la sine înțeles”* probabil că locația a fost doar memorată în cache de shell-ul tău - vezi, de exemplu, [Pytest este în PATH, dar nu a fost găsit](https://askubuntu.com/ a/861386/178692)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.