Como localizo onde o JDK está instalado na minha máquina Windows?

303

Preciso saber onde o JDK está localizado na minha máquina.

Ao executar Java -versionno cmd , mostra a versão como '1.6.xx'. Para encontrar a localização desse SDK na minha máquina, tentei usar, echo %JAVA_HOME%mas ele está mostrando apenas 'JAVA_HOME' (como não há var 'JAVA_PATH' definido em minhas variáveis ​​de ambiente).

Ashine
fonte
1
infelizmente, acho que algumas das respostas abaixo podem não funcionar, porque aparentemente algo mudou nas versões mais recentes do Java. Hoje eu baixei a versão 7.60 Java SDK. Após algumas pesquisas, localize-o em C: \ Arquivos de Programas (x86) \ Java \ jdk1.7.0_60. Já havia uma versão anterior do JRE 6 instalada. Ele estava em C: \ Arquivos de Programas \ Java e este estava no% PATH%, não na instalação mais recente.
likejudo
1
A melhor resposta está na parte inferior, uma linha da majkinetor para o PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2
mais uma coisa, se o seu jdk foi empacotado com a idéia intellij, ele pode estar em algum lugar perto da instalação da idéia. Para mim, ele estava em um diretório da pasta 1 acima da pasta da idéia, e a variável PATH apontou para um jre em Arquivos de Programas
KGS:

Respostas:

329

Se você estiver usando Linux / Unix / Mac OS X:

Tente o seguinte:

$ which java

Deve gerar a localização exata.

Depois disso, você pode definir JAVA_HOMEa variável de ambiente.

No meu computador (Mac OS X - Snow Leopard):

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Nov  7 07:59 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

Se você estiver usando o Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
Pablo Santa Cruz
fonte
Na verdade, o formulário% var_name% é o Windows
sblundy
1
Atualização da resposta com exemplos de Linux / Unix / Mac OS X e Windows.
Pablo Santa Cruz
125
where javafunciona no Windows (pelo menos a partir do Windows 7) Mas se você realmente deseja um JDK e não um JRE, precisa procurar nos diretórios retornados por 'bin / javac /'
Jon Strayer
onde java não fornece o caminho completo se java.exe estiver no caminho, enquanto a solução de Pablo for ... é preferível.
Richard Johnson
1
MacOS one-liner:ls -l $(which java) | awk '{print $11}'
msanford
111

Windows> Iniciar> cmd>

C:> for %i in (javac.exe) do @echo.   %~$PATH:i

Se você tiver um JDK instalado, o Caminho será exibido,
por exemplo:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

grokster
fonte
16
Windows (7+) => where javac.exe
hB0
6
No windows é, onde java
Pabitra Dash 01/07/2015
10
where javafunciona apenas se o executável estiver no PATH. Se, por qualquer motivo, o javac não estiver no caminho, ele não retornará nenhum resultado, mas isso não significa que o JDK não está instalado. Portanto, em geral, a solução de pesquisa de arquivos proposta pela solução @grokster garantirá um resultado (pode levar algum tempo para concluir).
Nikita G.
O material 'para-loop' não trabalho, no entanto, descobri-lo aqui: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Observe que, se você estiver seguindo este tutorial ( codelabs.developers.google.com/codelabs/… ) para usar o android studio, o caminho real não seria o que é retornado pelo comando acima. Provavelmente, você teria algo como "C: \\ Arquivos de Programas \ Java | <jdk>", onde, em vez de "jdk", teria algo como "jdk-10.0.1" para o JDK versão 10.
Euler_Salter
96

No Windows no prompt de comando

where javac

NanoBennett
fonte
8
Nas janelas é, onde java
Pabitra Dash 01/07/2015
7
Observe que isso só funciona se o javac estiver no PATH. Caso contrário, este comando dirá que não foi encontrado, mas o JDK ainda pode ser instalado. Use outros métodos se o PATH não tiver sido atualizado após a instalação do JDK.
Nikita G.
1
que outros métodos? Você mencionou o uso de% i em (javac.exe) do @echo. % ~ $ PATH: i , mas como você escreveu, não funcionará se você não o tiver definido no PATH.
Nimrod
30

No Windows, o padrão é: C:\Program Files\Java\jdk1.6.0_14(onde os números podem diferir, pois são a versão).

Ronen Rabinovici
fonte
como você recuperaria o número de versão diferente?
LZH
basta navegar para o local incrementalmente a partir do seu explorer e você verá a versão da pasta jdk que você instalou.
Ahnbizcad
26

O instalador do Java coloca vários arquivos na pasta% WinDir% \ System32 (java.exe, javaws.exe e outros). Quando você digita java.exe na linha de comando ou cria um processo sem o caminho completo, o Windows os executa como último recurso, se estiverem faltando nas pastas% PATH%.

Você pode procurar todas as versões do Java instaladas no registro. Dê uma olhada no HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment e no HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment para java de 32 bits no Windows de 64 bits.

É assim que o próprio Java descobre diferentes versões instaladas. E é por isso que as versões de 32 e 64 bits podem coexistir e funcionam bem sem interferir.

Denis The Menace
fonte
23

Simples e simples nas plataformas Windows:

onde java

luccaa
fonte
8
Isso resulta no local Java C: \ WINDOWS \ System32 \ java.exe incorreto. Mas o jdk real é instalado em C: \ Java \ jdk1.7.0 \ (como JAVA_HOME está definido) #
Himanshu Bhardwaj
17

O script em lote abaixo imprimirá o JRE padrão existente. Pode ser facilmente modificado para localizar a versão do JDK instalada, substituindo o Java Runtime Environment pelo Java Development Kit .

@echo off

setlocal

::- Get the Java Version
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set VALUE=CurrentVersion
reg query %KEY% /v %VALUE% 2>nul || (
    echo JRE not installed 
    exit /b 1
)
set JRE_VERSION=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
    set JRE_VERSION=%%b
)

echo JRE VERSION: %JRE_VERSION%

::- Get the JavaHome
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set VALUE=JavaHome
reg query %KEY% /v %VALUE% 2>nul || (
    echo JavaHome not installed
    exit /b 1
)

set JAVAHOME=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
    set JAVAHOME=%%b
)

echo JavaHome: %JAVAHOME%

endlocal
Munsingh
fonte
16

No Windows 10, você pode descobrir o caminho acessando Painel de Controle> Java. No painel que aparece, você pode encontrar o caminho conforme demonstrado na captura de tela abaixo. No Painel de Controle Java, vá para a guia 'Java' e clique no botão 'Exibir' na descrição 'Exibir e gerenciar versões e configurações do Java Runtime para aplicativos e applets Java'.

Isso deve funcionar no Windows 7 e possivelmente em outras versões recentes do Windows.

insira a descrição da imagem aqui

smartexpert
fonte
Eu estou no Windows 10 e não há java no painel de controle
Lang Reagir Dev
1
Tem certeza de que o Java está instalado e foi instalado usando o pacote de instalação do Windows?
Smartexpert 19/11/19
Você pode tentar olhar para as suas contas e de ambiente do sistema variáveis para descobrir onde java pode ser instalado, olhar para javacpl.exe
smartexpert
12

Em um prompt de comando do Windows, digite:

set java_home

Ou, se você não gosta do ambiente de comando, pode verificá-lo em:

Menu Iniciar> Computador> Propriedades do sistema> Propriedades avançadas do sistema. Em seguida, abra a guia Avançado> Variáveis ​​de ambiente e, na variável do sistema, tente encontrar JAVA_HOME.

insira a descrição da imagem aqui

AndroidDev
fonte
Isso me dá a pasta jdk. Quando executo System.getProperty ("java.home") em uma planilha do Scala, ele fornece a subpasta jre. Aparentemente, há alguma ambiguidade sobre o Java Home.
Ion Freeman
11

No Windows, você pode usar

C:>dir /b /s java.exe

para imprimir o caminho completo de todos os "java.exe" em sua unidade C:, independentemente de eles estarem na sua variável de ambiente PATH.

Thomas Bender
fonte
10

Mais sobre o Windows ... a variável java.home nem sempre é o mesmo local do binário executado.

Como Denis The Menace diz, o instalador coloca arquivos Java em Arquivos de Programa , mas também java.exe no System32 . Com nada o Java relacionado no caminho java -version ainda pode funcionar. No entanto, quando o programa do PeterMmm é executado, ele informa o valor dos Arquivos de Programas como java.home , isso não está errado (o Java está instalado lá), mas o binário real em execução está localizado no System32 .

Uma maneira de procurar a localização do binário java.exe , adicione a seguinte linha ao código do PeterMmm para manter o programa em execução por mais algum tempo:

try{Thread.sleep(60000);}catch(Exception e) {}

Compile e execute-o e, em seguida, procure o local da imagem java.exe . Por exemplo, no Windows 7, abra o gerenciador de tarefas, encontre a entrada java.exe , clique com o botão direito do mouse e selecione 'abrir localização do arquivo', isso abre a localização exata do binário Java. Nesse caso, seria System32 .

Moika Turns
fonte
9

Execute este programa a partir da linha de comando:

// File: Main.java
public class Main {

    public static void main(String[] args) {
       System.out.println(System.getProperty("java.home"));
    }

}


$ javac Main.java
$ java Main
PeterMmm
fonte
4
ela não teria que compilar isso primeiro?
Irwin
2
Isso encontrará um JRE se ele estiver instalado e no caminho primeiro.
Jon Strayer
9

Powershell um forro:

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
majkinetor
fonte
1
Para uso no JDK 11$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis
6

Você já tentou examinar sua variável% PATH%. É isso que o Windows usa para encontrar qualquer executável.

esplêndido
fonte
Sim. Echo %PATH%. Mina parece estar em c:\Program Files\Javano Windows 7
Mark Irvin
5

Basta executar o setcomando na sua linha de comando. Então você vê todas as variáveis ​​de ambiente que você definiu.

Ou se no Unix você pode simplificá-lo:

$ set | grep "JAVA_HOME" 

fonte
Obrigado Roflcoptr, foi realmente útil aprender sobre 'conjunto'. No meu sistema, ele está mostrando duas entradas para a mesma variável, como posso excluir a incorreta.
Ashine
3

Isso é específico do sistema operacional. No Unix:

which java

exibirá o caminho para o executável. Não conheço um equivalente do Windows, mas normalmente você tem a binpasta da instalação do JDK no sistema PATH:

echo %PATH%
Michael Borgwardt
fonte
Eu também daria essa resposta, mas ele está claramente procurando uma resposta do Windows.
Don Branson
@DonBranson Ele alterou o texto para incluir o Windows após o envio desta postagem.
EntangledLoops
2

Nenhuma dessas respostas está correta para o Linux se você estiver procurando a home que inclui subdiretórios como: bin, docs, include, jre, lib, etc.

No Ubuntu para openjdk1.8.0, está em: /usr/lib/jvm/java-1.8.0-openjdk-amd64

e você pode preferir usá- JAVA_HOMElo, pois você poderá encontrar cabeçalhos se criar arquivos de origem JNI. Embora seja verdade which java, forneça o caminho binário, não é o verdadeiro lar do JDK.

EntangledLoops
fonte
1

No macOS, execute:

cd /tmp && echo 'public class Main {public static void main(String[] args) {System.out.println(System.getProperty("java.home"));}}' > Main.java && javac Main.java && java Main

Na minha máquina, isso imprime:

/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home

Observe que a execução which javanão mostra o local do JDK, porque o javacomando é parte dele JavaVM.framework, que envolve o JDK real:

$ which java
/usr/bin/java
/private/tmp
$ ls -l /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 14 Nov 17:37 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
jameshfisher
fonte
0

no cmd do Windows:

set "JAVA_HOME" 
Husam
fonte
0
#!/bin/bash

if [[ $(which ${JAVA_HOME}/bin/java) ]]; then
    exe="${JAVA_HOME}/bin/java"
elif [[ $(which java) ]]; then
    exe="java"
else 
    echo "Java environment is not detected."
    exit 1
fi

${exe} -version

Para Windows:

@echo off
if "%JAVA_HOME%" == "" goto nojavahome

echo Using JAVA_HOME            :   %JAVA_HOME%

"%JAVA_HOME%/bin/java.exe" -version
goto exit

:nojavahome
echo The JAVA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program.
goto exit

:exit

Este link pode ajudar a explicar como encontrar o executável java no bash: http://srcode.org/2014/05/07/detect-java-executable/

Qian Chen
fonte
1
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Shaiful Islam
1
Obrigado @ShaifulIslam, seu ponto está correto. Eu adicionei o código do link.
Qian Chen
0

Eu melhorei a resposta de munsingh acima testando a chave do registro em registros de 64 e 32 bits, se necessário:

::- Test for the registry location  
SET VALUE=CurrentVersion
SET KEY_1="HKLM\SOFTWARE\JavaSoft\Java Development Kit"
SET KEY_2=HKLM\SOFTWARE\JavaSoft\JDK
SET REG_1=reg.exe
SET REG_2="C:\Windows\sysnative\reg.exe"
SET REG_3="C:\Windows\syswow64\reg.exe"

SET KEY=%KEY_1%
SET REG=%REG_1%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_1%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

::- %REG_2% is for 64-bit installations, using "C:\Windows\sysnative"
SET KEY=%KEY_1%
SET REG=%REG_2%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_2%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

::- %REG_3% is for 32-bit installations on a 64-bit system, using "C:\Windows\syswow64"
SET KEY=%KEY_1%
SET REG=%REG_3%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

SET KEY=%KEY_2%
SET REG=%REG_3%
%REG% QUERY %KEY% /v %VALUE% 2>nul
IF %ERRORLEVEL% EQU 0 GOTO _set_value

:_set_value
FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
    SET JDK_VERSION=%%b
)
SET KEY=%KEY%\%JDK_VERSION%
SET VALUE=JavaHome
FOR /F "tokens=2,*" %%a IN ('%REG% QUERY %KEY% /v %VALUE%') DO (
    SET JAVAHOME=%%b
)
ECHO "%JAVAHOME%"
::- SETX JAVA_HOME "%JAVAHOME%"

referência para acesso ao registro de 64 bits

JohnP2
fonte
0

Script para Windows de 32/64 bits.

@echo off

setlocal enabledelayedexpansion

::- Get the Java Version
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment"
set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment"
set VALUE=CurrentVersion
reg query %KEY% /v %VALUE% 2>nul || (
    set KEY=!KEY64!
    reg query !KEY! /v %VALUE% 2>nul || (
    echo JRE not installed 
    exit /b 1
)
)

set JRE_VERSION=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
    set JRE_VERSION=%%b
)

echo JRE VERSION: %JRE_VERSION%

::- Get the JavaHome
set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set KEY64="HKLM\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\%JRE_VERSION%"
set VALUE=JavaHome
reg query %KEY% /v %VALUE% 2>nul || (
    set KEY=!KEY64!
    reg query !KEY! /v %VALUE% 2>nul || (
    echo JavaHome not installed
    exit /b 1
)
)

set JAVAHOME=
for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do (
    set JAVAHOME=%%b
)

echo JavaHome: %JAVAHOME%

endlocal
Rudixx
fonte