qual é o motivo da existência da variável de ambiente JAVA_HOME?

92

Muitos aplicativos baseados em java requerem a definição da variável env JAVA_HOME. Qual é o propósito desta variável?

usuário496949
fonte
5
você pode ler aqui
Sergey Vedernikov
2
Acho que a pergunta ainda não tem resposta. Para executar o java propriamente dito, não é necessário ter esta variável se você tiver a pasta com o binário no caminho. Todas as respostas apontam para o óbvio: "Onde o java foi instalado". Mas por quê: qual é o significado de executar aplicativos Java?
Wolf
7
apesar de todos esses comentários e respostas, não vejo razão real para definir essa variável de ambiente. Sem justificativa. Eu vim aqui tentando definir isso com wsdl2java. Se eu não estivesse usando essa ferramenta, não há necessidade da variável env ... aparentemente, é apenas que algumas ferramentas usam essa var. mas por que?
Thufir
@Thufir - eu não vi a razão declarada em qualquer lugar explicitamente, entretanto. - JAVA_HOME é apenas uma convenção. Não tem nenhum significado especial além de todos concordaram em usá-lo. AFAIK - O único uso que vejo é que dá às ferramentas a capacidade de diferenciar entre o JRE, que normalmente é definido na variável PATH e o JDK. Normalmente, o JAVE_HOME é definido como o JDK. - É explícito. Não há como lidar com a ordem dos diretórios como você fez com PATH, onde pode haver vários locais para localizar java exe.
Rohan

Respostas:

22

Variáveis ​​de ambiente são strings que contêm informações como unidade, caminho ou nome do arquivo.

A variável de ambiente JAVA_HOME aponta para o diretório onde o Java Runtime Environment (JRE) está instalado em seu computador.

Kamaci
fonte
40
Uma correção: JAVA_HOME deve apontar para um JDK, não um JRE. Muitos aplicativos não se importam com a diferença, mas é significativa para alguns.
Chris Nava
4
Também há uma pasta JRE disponível no JDK. Portanto, com a ajuda de JAVA_HOME, um aplicativo pode localizar o JDK, bem como o JRE.
ladino
@ChrisNava: Parece que apontar JAVA_HOME para uma instalação JRE é válido em alguns casos (na maioria dos casos de não desenvolvimento, eu acho): stackoverflow.com/questions/17601827/… . Portanto, dizer "deveria" é dizer muito.
cic
18

O objetivo é apontar onde o Java está instalado. $JAVA_HOME/bin/javadeve executar o Java runtime.

Haakon
fonte
4
Mas é estúpido, porque java deve estar no caminho, e o binário pode se localizar e abrir os outros arquivos usando um caminho relativo.
LtWorf 01 de
3
É útil quando o java não está em $ PATH, por exemplo, quando você tem várias instalações do SDK.
Haakon
O primeiro argumento para o binário é o nome completo do próprio executável, java não precisa estar no caminho para encontrar seu próprio diretório.
LtWorf
@Haakon Como alguém que está tentando configurar vários JDKs, por que você não quer o java no caminho? Como o Windows localiza java de java_home? Achei que o caminho estava mais ou menos definido como "a lista de lugares onde o SO procurará executáveis".
LastStar007
7

Quando você executa um programa Java, é necessário primeiro iniciar o JVM, normalmente isso é feito executando um executável, no Windows é java.exe . Você pode conseguir isso de várias maneiras, por exemplo, apenas fornecendo um caminho completo:

C:\somedir\bin\java.exe

ou pode tê-lo em seu PATH.

Você especifica como argumentos de linha de comando alguns arquivos de classe ou arquivos Jar contendo arquivos de classe que são o seu programa. Mas isso não é suficiente, o próprio java.exe precisa de vários outros recursos, não menos do que todas as bibliotecas Java. Ao definir a variável de ambiente JAVA_HOME, você especifica onde o JRE e, portanto, todos os recursos de tempo de execução devem ser encontrados. Você deve garantir que o Java específico executado corresponda à configuração de JAVA_HOME.

Você também pode precisar colocar JAVA_HOME\bin no início de seu caminho para que, se java.exegerar uma cópia de si mesmo (por exemplo, para compilar um JSP), ele pegue a versão correta.

djna
fonte
5

JAVA_HOMEé uma variável de ambiente .

Ele deve ser configurado em um sistema operacional diferente. Confira os links a seguir.

Veja também aqui para mais informações.

Sgokhales
fonte
1
Você está confundindo environmentcom path, que são coisas diferentes, mas usadas no Windows exatamente da mesma forma que no Linux.
Val
1
@val apenas apontando, isso já foi corrigido em sua resposta.
barlop
Apenas para adicionar à lista JAVA_HOME no Windows 10
filip_j
5

De acordo com @dirai, aqui JAVA_HOMEnão é usado pelo Java em si, mas por algumas ferramentas de terceiros, como por exemplo o Apache Tomcat. A maioria dos aplicativos, entretanto, funcionará sem essa variável ser definida, mas alguns podem apresentar um comportamento inesperado.

Karlsebal
fonte
3

JAVA_HOMEpermite que você execute qualquer uma das várias instalações java. Mesmo se você tiver o /usr/lib/jvm/java-1.8.0/bin/java em seu PATH primeiro, é útil ser capaz de dizer JAVA_HOME=/usr/lib/jvm/java-1.5.0e fazer com que o "java" padrão com o qual você executa os programas use o outro, em vez disso, como uma questão de configuração do ambiente. Isso permite que um programador use o java de que precisa, mesmo se não estiver instalado em um local normal do sistema, e teste ou forneça compatibilidade reversa com essa versão alternativa. E não é vulnerável a ser redefinido no PATH por outro programa instalado, como uma atualização de versão principal do próprio java.

Nico Kadel-Garcia
fonte