Un modo a livello di sistema per impostare o ottenere $ JAVA_HOME in Ubuntu?


8

Mi chiedo se Ubuntu stesso fornisce un modo a livello di sistema per trovare la corrente JAVA_HOMEo se c'è il posto giusto per l'impostazione JAVA_HOME.

Mac OS X fa bene in questo, poiché il /usr/libexec/java_homecomando restituisce la corrente JAVA_HOME. Ma per Ubuntu, i materiali che ho trovato mi hanno sempre detto di impostare il $JAVA_PATHpuntamento su un percorso statico, in cui è memorizzato ~/.bash_profile.

Penso, tuttavia, che questo approccio abbia diversi inconvenienti:

  1. Dopo l'aggiornamento di Java, il numero di versione mini cambierà, il che rende il percorso statico non più disponibile.
  2. Dopo aver cambiato il JRE utilizzato nel mio sistema con update-alternatives, devo modificare $JAVA_HOMEin .bash_profile. Quel lavoro extra è fastidioso.
  3. Alcuni $JAVA_HOMEprogrammi richiesti non ne sono affatto consapevoli .bash_profile. Devo impostare il $JAVA_HOMEloro script di avvio, quindi un modo semplice e standard per ottenere $JAVA_HOMEsembra fondamentale per me.

Bene, ogni consiglio è il benvenuto. Grazie.

Risposte:


6

Un po 'confuso, ma metti questa linea nel tuo /etc/profileper impostarla a livello di sistema:

export JAVA_HOME=$(dirname $(dirname $(readlink -e /usr/bin/javac)))

Ad alcuni amministratori di sistema piace giocherellare con il PERCORSO, quindi il / usr / bin non è necessariamente il primo posto cercato. Per essere sicuri di scegliere il percorso della versione che verrà effettivamente eseguita, un re-hack migliore potrebbe essere: export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
SimonB

funziona se il percorso esiste. C'è un modo per renderlo silenzioso su sistemi che non hanno Java?
Greggles,

come fare questo in Mac? "readlink -e" non funziona.
Artanis Zeratul,

1

È possibile impostare le variabili di ambiente in /etc/environment, che viene configurato da PAM. Dovrebbero esserci anche collegamenti simbolici in /usr/lib/jvmcui non cambiano con le versioni minori.

JAVA_HOME=/usr/lib/jvm/java-6-sun

0

Imposta il profilo del sistema di percorso

Modifica il file Path di sistema / etc / profile

sudo gedit /etc/profile

Aggiungi le seguenti righe alla fine

JAVA_HOME=/usr/lib/jvm/jdk1.7.0
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

Per http://javaandme.com/ per la guida completa all'installazione.


0

Se sei sicuro che il comando 'java' possa essere chiamato, non funzionerebbe per te?

export JAVA_HOME=$(dirname $(java -XshowSettings:properties -version 2>&1 | grep 'java\.home' | awk '{ print $3 }'))

L'OP sta cercando un modo per impostare il $JAVA_HOMEsistema, non solo nella shell corrente.
Celada,

0

La soluzione accettata da user13742 presuppone che il server abbia sicuramente Java installato. Nel caso in cui lo si aggiunga a uno script centralizzato per molti server, verranno visualizzati alcuni errori come:

dirname: missing operand
Try 'dirname --help' for more information.

Per evitare ciò e impostare JAVA_HOME solo se il server ha un ambiente Java, un leggero miglioramento è:

if [ -f "$(which javac)" ]; then
    export JAVA_HOME=$(dirname $(dirname $(readlink -e $(which javac))))
fi

Ho anche incorporato la modifica da SimonB da utilizzare whichper trovare dove si trova l'installazione.


Posso metterlo in questo /etc/environment?
Jin Kwon,
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.