Como é que descubro onde o JDK está instalado na minha máquina do windows?
preciso de saber onde está o JDK na minha máquina.
em execução {[[0]} em cmd , mostra a versão como '1.6.xx".
Para encontrar a localização deste SDK na minha máquina eu tentei usar echo %JAVA_HOME%
mas ele só está mostrando ' JAVA_HOME '(como não há nenhum' JAVA_PATH ' var definido em minhas variáveis de ambiente).
24 answers
Se estiver a utilizar Linux / Unix / Mac OS X:
Tenta isto:
$ which java
Deve indicar a localização exacta.
Depois disso, você pode definir a variável de ambiente JAVA_HOME
.
$ 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 estiver a utilizar o Windows:
c:\> for %i in (java.exe) do @echo. %~$PATH:i
Janelas > início > cmd >
C:> for %i in (javac.exe) do @echo. %~$PATH:i
Se tiver um JDK instalado, a localização é mostrada,
por exemplo: C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe
Nas janelas na linha de comandos
where javac
No windows, o valor por omissão é: C:\Program Files\Java\jdk1.6.0_14
(onde os números podem ser diferentes, dado que são a versão).
Simples e simples nas plataformas Windows:
Em que java
O instalador de Java coloca vários ficheiros na pasta %WinDir % \System32 (java.exe, javaws.exe e alguns outros). Quando Digitas java.o exe na linha de comandos ou cria um processo sem a localização completa, o Windows executa-os como último recurso se não estiverem em %PATH% folders.
Pode procurar todas as versões de Java instaladas no registo. Dê uma olhada em HKLM\SOFTWARE\JavaSoft\Java Runtime Environment e HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment for 32-bit java on 64 bit Janela.
É assim que o próprio java descobre diferentes versões instaladas. E é por isso que ambas as versões 32-bit e 64-bit podem coexistir e funcionar bem sem interferir.
No Windows 10 você pode descobrir o caminho indo para o Painel De Controle > Programas > Java. No painel que aparece, você pode encontrar o caminho como demonstrado na imagem abaixo. No painel de Controle Java, vá para a página ' Java 'e, em seguida, clique no botão' View 'sob a descrição' View e gerencie versões e configurações de execução Java para aplicações e applets Java.'
Isto deve funcionar no Windows 7 e possivelmente em outras versões recentes do Windows.
O programa em lote abaixo irá imprimir o JRE predefinido existente. Ele pode ser facilmente modificado para encontrar a versão JDK instalada, substituindo o ambiente de execução Java por kit de desenvolvimento Java.
@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
Debaixo do Windows, pode usar
C:>dir /b /s java.exe
Para imprimir o caminho completo de cada java.exe " no seu C: drive, independentemente de estarem na sua variável de ambiente PATH.
Numa linha de comandos do Windows, basta escrever:
set java_home
Ou, se não gosta do ambiente de comandos, pode verificá-lo a partir de:
Menu Iniciar > Computador > Propriedades do sistema > Propriedades Avançadas do sistema. Em seguida, abrir tab > variáveis de ambiente avançado e em variável de Sistema tentar encontrar JAVA_HOME.
Powershell One liner:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Mais nas janelas... variável java.o home nem sempre é a mesma localização do binário que é executado.
Como diz Denis, a ameaça, o instalador coloca ficheiros Java em ficheiros de Programas, mas também java.exe into System32 . Sem nada Java relacionado no path java-version ainda pode funcionar. No entanto, quando o programa do PeterMmm é executado, ele relata o valor de arquivos de Programa como java.home , isto não está errado (o Java está instalado lá) mas o binário real sendo executado está localizado em System32 .
Uma maneira de descobrir a localização do java.executável exe , Adicione a seguinte linha ao código do PeterMmm para manter o programa em execução durante mais algum tempo:try{Thread.sleep(60000);}catch(Exception e) {}
Compile e execute-o, em seguida, procure a localização do java.exe imagem. Por exemplo, no Windows 7, abra o Gestor de Tarefas, encontre o java.o item exe , carregue com o botão direito e seleccione 'Abrir a localização do ficheiro', isto abre a localização exacta do Binário Java. Neste caso seria System32.
Execute este programa a partir da linha de comandos:
// File: Main.java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("java.home"));
}
}
$ javac Main.java
$ java Main
Já tentou ver a sua variável % PATH. É o que o Windows usa para encontrar qualquer executável.
Execute apenas o comando set
na sua linha de comando. Então você vê todas as variáveis de ambientes que você definiu.
Ou se estiver no Unix pode simplificá-lo:
$ set | grep "JAVA_HOME"
which java
Irá mostrar a localização do executável. Eu não sei de um equivalente Windows, mas lá você normalmente tem a pasta bin
da instalação JDK no sistema PATH
:
echo %PATH%
No Windows PowerShell você pode usar a função Get-Command
para ver onde o Java está instalado:
Get-Command -All java
Ou
gcm -All java
A parte -All
certifica-se de mostrar todos os locais que aparece na pesquisa do caminho. Abaixo está o exemplo de saída.
PS C:> gcm -All java
CommandType Name Version Source
----------- ---- ------- ------
Application java.exe 8.0.202.8 C:\Program Files (x86)\Common Files\Oracle\Java\jav...
Application java.exe 8.0.131... C:\ProgramData\Oracle\Java\javapath\java.exe
Nenhuma destas respostas está correta para o Linux se você está procurando a casa que inclui os subdirs como: bin, docs, include, jre, lib, etc.
Em Ubuntu para openjdk1. 8. 0, isto está em:
/usr/lib/jvm/java-1.8.0-openjdk-amd64
E você pode preferir usar isso para JAVA_HOME
uma vez que você será capaz de encontrar cabeçalhos se você criar arquivos de código JNI. Embora seja verdade which java
irá fornecer o caminho binário,não é a verdadeira casa JDK.
Em macOS, corra:
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, isto imprime:
/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
Note que a execução which java
não mostra a localização do JDK, porque o comando java
é em vez de fazer parte de JavaVM.framework
, que envolve o verdadeiro JDK:
$ 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
No Windows cmd:
set "JAVA_HOME"
#!/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 as janelas:
@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
Esta ligação pode ajudar a explicar como encontrar o executável java do bash: http://srcode.org/2014/05/07/detect-java-executable/
Melhorei a resposta de munsingh testando a chave do registo nos registos de 64 bits 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%"
Programa para Janelas 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
Execute isto no terminal:
/usr/libexec/java_home