Come determinare JAVA_HOME su Debian / Ubuntu?


95

Su Ubuntu è possibile avere più JVM contemporaneamente. Quello predefinito è selezionato con update-alternatives. Ma questo non imposta la JAVA_HOMEvariabile d'ambiente, a causa di una politica debian .

Sto scrivendo uno script di avvio (bash), che avvia un'applicazione Java. Questa applicazione java necessita della JAVA_HOMEvariabile d'ambiente. Quindi, come ottenere il percorso della JVM che è attualmente selezionato da update-alternatives?

Risposte:


137

Per il JRE, qualcosa del genere dovrebbe fare il trucco:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

17
Avevo bisogno della casa del JDK invece del JRE, ma ho ottenuto questo usando: JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: bin / javac ::") Grazie!
Witek,

quando ho provato il comando echo $(readlink -f /usr/bin/java | sed "s:bin/java::"), l'output era /usr/lib/jvm/java-7-oracle/jre/e non/usr/lib/jvm/java-7-oracle/
Sumit Ramteke

Il codice fornito in rsaddey funziona correttamente
Sumit Ramteke,

43

La soluzione di danadam può essere facilmente adottata per recuperare il percorso JDK (cioè non JRE) come richiesto:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • Cerca il compilatore Java javac (anziché java) incluso in JDK (ma non JRE).
  • Non ha trascinamento / (rimosso da sed s: / bin ... invece di s: bin ...)

12

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

In .bashrcera comodo per me.


9

Quindi, stai dicendo che questo comando non fa nulla per te?

sudo update-alternatives --config java 

2
Supponiamo che tu abbia impostato JAVA_HOME? Ho scoperto che update-java-alternatives è un modo migliore per aggiornare Java poiché update-alternatives non aggiorna tutte le alternative relative a Java. Vedi askubuntu.com/questions/141791
James McMahon

È vero, ma ho riscontrato istanze di Linux che avevano alternative di aggiornamento ma che non avevano installato update-java-alternative.
Djangofan,

3

Ho installato java con

sudo apt-get install openjdk-7-jre-headless

e quindi per trovare la posizione

ls -al /etc/alternatives/java

2

Come estensione della risposta di Danadams:

Prima di tutto, installa il 2 ° JRE Java come terza opzione java, con priorità "3":

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3

Quindi, puoi elencarli:

update-alternatives --list java

Puoi impostare l'alternativa a mano, usando questo:

sudo alternatives --config java /opt/IBM/java/jre/bin/java

Quindi, il tuo script può impostarlo al volo, in questo modo:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Questo illustra meglio cosa sta facendo il comando 'sed'. Sebbene sia ancora necessario impostare i collegamenti per javaw e javac, ecc., Ciascuno fatto separatamente.


1

Qualche tempo fa ho creato un tutorial sul forum di Ubuntu su come installare l'ultimo JRE / JDK dal sito Web Java. Descrive inoltre come abilitarlo a livello di sistema, aggiungendo la posizione JRE / JDK alla variabile PATH. Se lo desideri, puoi anche aggiungere JAVA_HOME allo script, menzionato alla fine dell'argomento.

Dai un'occhiata: http://ubuntuforums.org/showthread.php?t=1437100


1

Se java è configurato con update-alternativeso è stato aggiunto manualmente alla variabile PATH, non "/usr/bin/java"è necessario alcun hardcoded . Uso questa soluzione nel mio .bashrc:

export JAVA_HOME=$(readlink -m $(which java)/../..)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.