Come impostare JAVA_HOME in Linux per tutti gli utenti


185

Sono nuovo nel sistema Linux e sembrano esserci troppe cartelle Java.

java -version mi dà:

  • versione java "1.7.0_55"
  • OpenJDK Runtime Environment (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • VM del server OpenJDK a 64 bit (build 24.51-b03, modalità mista)

Quando sto provando a costruire un progetto Maven, ricevo un errore:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

Potresti dirmi quali file devo modificare per utenti root e non root e dove si trova esattamente java?

Risposte:


354
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    Prepara sudo se hai effettuato l'accesso come utente non privilegiato, ad es. sudo vim

  3. Premi 'i' per entrare in modalità inserimento
  4. Inserisci:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. disconnettersi e accedere nuovamente, riavviare o utilizzare source /etc/profileper applicare immediatamente le modifiche nella shell corrente

29
non dimenticare di eliminare le doppie virgolette e ricrearle dalla tastiera, poiché solo la copia e l'incolla possono creare problemi.
Sunil Kumar,

12
@rbaleksandar da cui dipendono alcune applicazioni JAVA_HOME, non fa male a configurarlo.
Raffian,

2
IntelliJ è una tale applicazione - e non una minore.
Pete,

12
È necessario eseguire source /etc/profileimmediatamente anche le modifiche per rendere effettive le modifiche!
Mohamed Taher Alrefaie,

1
Questo mi ha indicato la giusta direzione. In realtà c'era una stantia che /etc/profile.d/jdk.shgalleggiava nel mio sistema.
Hermann,

109

Per tutti gli utenti, consiglierei di inserire la seguente riga /etc/profile

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

Questo si aggiorna in modo dinamico e funziona bene con il sistema di alternative . Si noti tuttavia che l'aggiornamento avverrà solo in una nuova shell di accesso.


10
per conformarsi al semplice uso di JRE (anche senza testa) export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")invece - nota che io uso solo java, nonjavac
Roman Kruglov

@occulta Almeno Maven si aspetta che JAVA_HOME faccia riferimento a un JDK e lo utilizza per individuare il compilatore java.
Eero Aaltonen,

1
Promuovi readlinke aggiorna / aggiorna la soluzione compatibile, anche questa è una discussione di 5 anni. Consiglio solo di non modificare / etc / profile, ma di posizionare l'esportazione all'interno del file personalizzato, ad esempio /etc/profile.d/java_environment.sh, forse è necessario chmod +x java_environment.she riavviare.
ChristophS,

Perfetto. Meglio della mia dirnamesoluzione ingombrante . Se sei come me e vuoi capire cosa sta succedendo qui, questa è una semplice sostituzione del testo corrispondente dall'input con una stringa vuota. Il carattere "predefinito" per le sostituzioni è il /, ma finché sei coerente, puoi sostituirlo /con qualsiasi cosa. In questo caso sono i due punti che usiamo /per i separatori di percorso.
Ungeheuer,

35

Puoi usare / etc / profile o meglio un file come /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

Devi ricordare che questo file è caricato solo con nuove shell di login .. Quindi dopo bash -l o una nuova sessione gnome e che non cambia con le nuove versioni di Java.


1
almeno nel mio profilo linux (raspbian), / etc / proverà /etc/profile.d/*.shquindi il tuo file deve essere chiamato in jdk_home.shmodo che venga fornito
Hilikus

Grazie @Hilikus :-) L'ho modificato di conseguenza.
flob

2
Grazie. ho fatto un mix tra la tua e la risposta di Eero per il meglio dei due mondi;)
Hilikus,

1
Questa è la risposta migliore
Jacob

/etc/profile.d/jdk_home.shè la risposta molto più chiara, almeno per Ubuntu , /etc/profileè già raggruppata con così tanta logica. Non sembra saggio aggiungerne altro ...
Ng Sek Long,

30

Nessuna delle altre risposte è stata "attaccata" per me in RHEL 7, anche impostando JAVA_HOMEe PATHdirettamente dentro /etc/profileo ~/.bash_profilenon avrebbe funzionato. Ogni volta che provavo a verificare se JAVA_HOMEera impostato, si spegneva:

$ echo $JAVA_HOME
    (<-- no output)

Quello che dovevo fare era impostare uno script in /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

Inizialmente ho trascurato la prima riga (la #!/bin/sh) e senza di essa non funzionerà.

Ora funziona:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

Ho avuto la stessa esperienza su RHEL 7. Ho rimosso le esportazioni dal ~ / .bash_profile e usato questo approccio.
xpagesbeast

#! / bin / sh non è richiesto in jdk_home.sh. una volta
terminata

12

È molto facile impostare un percorso in Linux. Fai come segue:

Step-1 Apri il terminale e digita sudo gedit .bashrc

Step-2 Ti chiederà la tua password. Dopo aver digitato la password, si aprirà il file bash. Quindi vai alla fine e digita sotto

step-3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

passaggio-4 Quindi salvare il file ed uscire dal file

Sopra è per un singolo utente. Per tutti gli utenti, devi seguire i passaggi seguenti

Passo 1 gedit /etc/profile

Passo 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Step-3 export PATH=$PATH:$JAVA_HOME/bin

Spero che questo ti aiuti. Grazie!


2
questa risposta lo imposta solo per l'utente corrente.
Manuel Manhart,

Grazie @ickyrr
PyDevSRS

7

Facendo quello che fa Oracle (come ex dipendente Sun non riesco ad abituarmi a quello)

-s latestJavaRelease / usr / java / default
Dove latestJavaRelease è la versione che si desidera utilizzare

quindi esporta JAVA_HOME = / usr / java / default


6

La risposta è data messaggi precedenti è valido. Ma nessuna risposta è completa rispetto a:

  1. La modifica del profilo / etc / non è consigliata semplicemente per il motivo (come indicato in / etc / profile):
  • NON è una buona idea cambiare questo file se non sai cosa stai facendo. È molto meglio creare uno script shell custom.sh in /etc/profile.d/ per apportare modifiche personalizzate al proprio ambiente, poiché ciò impedirà la necessità di unirsi in futuri aggiornamenti. *
  1. Quindi, come indicato sopra, creare il file /etc/profile.d/custom.sh per le modifiche personalizzate.

  2. Ora, per essere sempre aggiornato con le versioni più recenti di Java installate, non inserire mai il percorso assoluto, invece usa:

#if rendendo jdk come java home

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

O

#if rendendo jre come java home

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

  1. E ricorda di avere #! / bin / bash sul file custom.sh

4

Copia il percorso del file bin che hai installato

YOUR PATH

aprire il terminale e modificare il file di ambiente digitando il comando seguente,

sudo nano /etc/environment

In questo file, aggiungi la seguente riga (sostituendo YOUR_PATHcon il percorso appena copiato):

JAVA_HOME="YOUR_PATH"

Questo dovrebbe essere sufficiente per impostare la variabile di ambiente. Ora ricarica questo file:

source /etc/environment

ora testalo eseguendo:

echo $JAVA_HOME

3
sessione terminale corrente di olny effects
Fatih Türker,

@ FatihTürker Riavvia il PC
Jack Giffin il

Per me usando jdk11, YOUR_PATH è/usr/lib/jvm/default-java/
Jack Giffin il

Il percorso JAVA_HOME è impostato ma non funziona. cioè java non funziona. Anche dopo il riavvio
Ssenyonjo

2

Su Linux aggiungo questa riga al mio ~ / .profile:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
Sembra una risposta potenzialmente corretta, ma potresti spiegare perché funziona, ovvero cosa fa e qual è il problema del PO? Inoltre, dici "su Linux", ma ci sono molte distro Linux diverse e potrebbe non funzionare per tutte, per favore aggiungi per quale distro funziona.
Buurman,

2

Questo è uno script molto semplice per risolvere il problema

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

E per i test:

echo $JAVA_HOME

2

Passaggio 1: controlla la versione java corrente di "echo $ JAVA_HOME"

Passaggio 2: vim / etc / profile

Step 3 - Alla fine del file troverai l'esportazione JAVA_HOME, qui dobbiamo fornire il nuovo percorso, assicurati che non sia relativo.

Step 4 - Salva ed esci: wq

Passaggio 5 - "source / etc / profile /", questo eseguirà la modifica

Passaggio 6: ripeti di nuovo l'eco $ JAVA_HOME: il cambiamento si sarebbe riflesso.


2

1 ... Usando la scorciatoia Ctlr+ Alt+ Tper aprire il terminale

2 ... Eseguire il comando seguente:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (Consigliato) Riavvia la VM / il computer. È possibile utilizzare source /etc/sourcese non si desidera riavviare il computer

4 ... Usando la scorciatoia Ctlr+ Alt+ Tper aprire il terminale

5 ... Rata JAVA_HOME verificata con

echo $JAVA_HOME

Copia da una riga dal flob , merito a loro


2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME

1

Probabilmente è una buona idea procurarsi qualsiasi profilo che modifichi per evitare di dover utilizzare un nuovo login.

o: fonte / etc / o. /eccetera/

Dov'è il profilo che hai modificato.


1

Mentre stiamo impostando JAVA_HOME, permettimi di condividere alcuni vantaggi dell'impostazione di JAVA_HOME o di qualsiasi altra variabile d'ambiente:

1) È facile aggiornare JDK senza influire sull'avvio dell'applicazione e sul file di configurazione che punta a JAVA_HOME. devi solo scaricare la nuova versione e assicurarti che JAVA_HOME punti alla nuova versione di Java. Questo è il miglior vantaggio dell'uso di variabili o collegamenti di ambiente.

2) La variabile JAVA_HOME è breve e concisa invece del percorso completo della directory di installazione di JDK.

3) La variabile JAVA_HOME è indipendenza dalla piattaforma, ovvero se lo script di avvio utilizza JAVA_HOME, può essere eseguito su Windows e UNIX senza alcuna modifica, è sufficiente impostare JAVA_HOME sul rispettivo sistema operativo.

Per saperne di più: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

Pubblicazione come risposta, in quanto non ho il privilegio di commentare.

Nota : segui la risposta accettata pubblicata da "That Dave Guy".

Dopo aver impostato le variabili, assicurarsi di impostare le autorizzazioni appropriate per la directory java in cui è installata.

chmod -R 755 /usr/java

1

Tutti i passaggi operativi (trovare java, dir parent, file di editing, ...) una soluzione

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

Risultato:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

Spiegazione:

1) Dividiamo l'intero comando in pezzi

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) Trova il percorso java dal comando java

# $(which java)
"/usr/bin/java"

3) Ottieni percorso relativo dal percorso simbolico

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) Ottieni il percorso principale di /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) Ottieni il percorso principale di /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"

1

In / etc / profile, se lo apri, ti accorgerai che non è consigliabile scrivere su quel file. Invece di creare uno script dei tuoi comandi (supponiamo test.sh) vai nella cartella /etc/profile.d e metti lì test.sh. Ogni volta che riavvii l'istanza, verrà automaticamente chiamato da / etc / profile.



0

apri kafka-run-class.sh con sudo per scrivere

puoi trovare kafka-run-class.sh nella tua cartella kafka: kafka / bin / kafka-run-class.sh

controlla queste righe

inserisci qui la descrizione dell'immagine

Modifica la variabile JAVA nella parte else per puntare all'eseguibile java nel tuo java / bin. come JAVA = "$ JAVA_HOME / java"


-1

Io uso la linea:

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

al mio ~ / .profile in modo che utilizzi la base della directory java predefinita al momento dell'accesso. Questo è per bash.

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.