qual è il motivo dell'esistenza della variabile d'ambiente JAVA_HOME?


92

Molte applicazioni basate su java richiedono l'impostazione della variabile env JAVA_HOME. Qual è lo scopo di questa variabile?


5
puoi leggere qui
Sergey Vedernikov

2
Trovo che la domanda non abbia ancora una risposta. Per quanto riguarda l'esecuzione di java stesso, non è necessario avere questa variabile se hai la cartella con il binario nel percorso. Tutte le risposte sottolineano l'ovvio: "Dove è stato installato java". Ma perché: qual è il significato di eseguire applicazioni Java?
Wolf

7
nonostante tutti questi commenti e risposte, non vedo alcun motivo effettivo per impostare questa variabile di ambiente. Nessuna motivazione. Sono venuto qui dal tentativo di impostarlo con wsdl2java. Se non stavo usando questo strumento, non c'è bisogno della variabile env ... apparentemente è solo che alcuni strumenti usano questa var. ma perché?
Thufir

@ Thufir - Tuttavia, non ho visto il motivo esplicitamente dichiarato da nessuna parte. - JAVA_HOME è solo una convenzione. Non ha alcun significato speciale a parte il fatto che tutti hanno concordato di usarlo AFAIK - L'unico uso che vedo è che dà agli strumenti la capacità di distinguere tra il JRE che è normalmente impostato nella variabile PATH e il JDK. Normalmente JAVE_HOME è impostato su JDK. - È esplicito. Non si ha a che fare con l'ordine delle directory come con PATH dove potrebbero esserci più posti per trovare java exe.
Rohan

Risposte:


22

Le variabili di ambiente sono stringhe che contengono informazioni come unità, percorso o nome file.

La variabile di ambiente JAVA_HOME punta alla directory in cui è installato Java Runtime Environment (JRE) sul computer.


40
Una correzione: JAVA_HOME dovrebbe puntare a un JDK, non a JRE. Molte app non si preoccupano della differenza, ma per alcune è significativa.
Chris Nava

4
C'è anche la cartella JRE disponibile nel JDK. Quindi, con l'aiuto di JAVA_HOME, un'applicazione può individuare sia JDK che JRE.
ladro

@ChrisNava: Sembra che in alcuni casi il puntamento di JAVA_HOME a un'installazione JRE sia valido (la maggior parte dei casi di non sviluppo immagino): stackoverflow.com/questions/17601827/… . Quindi dire "dovrebbe" significa dire troppo.
cic

18

Lo scopo è indicare dove è installato Java. $JAVA_HOME/bin/javadovrebbe eseguire il runtime Java.


4
Ma è stupido, perché java dovrebbe essere nel percorso e il binario può localizzarsi e aprire gli altri file utilizzando un percorso relativo.
LtWorf

3
È utile quando java non è su $ PATH, ad esempio quando sono presenti più installazioni SDK.
Haakon

Il primo argomento del binario è il nome completo dell'eseguibile stesso, non è necessario che java si trovi nel percorso per trovare la propria directory.
LtWorf

@Haakon Come qualcuno che cerca di configurare più JDK, perché non vorresti java sul percorso? In che modo Windows individua comunque java da java_home? Ho pensato che il percorso fosse più o meno definito come "l'elenco di luoghi in cui il sistema operativo cercherà gli eseguibili".
LastStar007

7

Quando esegui un programma Java, devi prima avviare la JVM, in genere questo viene fatto eseguendo un eseguibile, su Windows questo è java.exe . Puoi ottenerlo in molti modi, ad esempio solo fornendo un percorso completo:

C:\somedir\bin\java.exe

o potrebbe averlo sul tuo PATH.

Specificate come argomenti della riga di comando alcuni file di classe o file Jar contenenti file di classe che sono il vostro programma. Ma non è abbastanza, lo stesso java.exe necessita di varie altre risorse, non ultime tutte le librerie Java. Impostando la variabile d'ambiente JAVA_HOME si specifica dove si trovano JRE, e quindi tutte quelle risorse di runtime. È necessario assicurarsi che il particolare Java che si esegue corrisponda all'impostazione di JAVA_HOME.

Potresti anche aver bisogno di metterti JAVA_HOME\binpresto sul tuo percorso in modo che se il filejava.exe genera una copia di se stesso (ad esempio per compilare un JSP), prenda la versione corretta.


5

JAVA_HOMEè una variabile d'ambiente .

Deve essere configurato su un sistema operativo diverso. Controlla i seguenti link.

Vedere anche qui per ulteriori informazioni.


1
Ti stai confondendo environmentcon path, che sono cose diverse ma utilizzate in Windows esattamente allo stesso modo di Linux.
Val

1
@val ha appena sottolineato, che da allora è stato corretto nella sua risposta.
barlop

Solo per aggiungere all'elenco JAVA_HOME in Windows 10
filip_j

5

Secondo @dirai qui JAVA_HOMEnon viene utilizzato da Java stesso ma da alcuni strumenti di terze parti come ad esempio Apache Tomcat. La maggior parte delle applicazioni tuttavia funzionerà senza che questa variabile sia impostata, ma alcune potrebbero mostrare un comportamento imprevisto.


3

JAVA_HOMEti permette di eseguire una qualsiasi delle più installazioni java. Anche se hai il primo /usr/lib/jvm/java-1.8.0/bin/java nel tuo PERCORSO, è utile poter dire JAVA_HOME=/usr/lib/jvm/java-1.5.0e avere il "java" predefinito con cui esegui i programmi usa l'altro, invece, come una questione di impostazione dell'ambiente. Ciò consente a un programmatore di utilizzare il java di cui ha bisogno, anche se non è installato in una normale posizione di sistema, e di testare o fornire la compatibilità inversa con quella versione alternativa. E non è vulnerabile al ripristino nel PERCORSO da un altro programma installato, come un aggiornamento della versione principale per Java stesso.

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.