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?