¿Cómo encuentro dónde está instalado JDK en mi máquina Windows?

303

Necesito saber dónde se encuentra JDK en mi máquina.

Al ejecutarse Java -versionen cmd , muestra la versión como '1.6.xx'. Para encontrar la ubicación de este SDK en mi máquina, intenté usar echo %JAVA_HOME%pero solo muestra 'JAVA_HOME' (ya que no hay un conjunto de variables 'JAVA_PATH' en mis variables de entorno).

Ashine
fuente
1
desafortunadamente, creo que algunas de las respuestas a continuación pueden no funcionar porque aparentemente algo cambió con versiones más recientes de Java. Hoy descargué la versión 7.60 Java SDK. Después de buscar un poco, lo encontré en C: \ Archivos de programa (x86) \ Java \ jdk1.7.0_60. Había una versión anterior de 6 JRE ya instalada. Estaba en C: \ Archivos de programa \ Java y esto estaba en% PATH%, no en la instalación más reciente.
likejudo
1
La mejor respuesta está en la parte inferior, una línea de majkinetor para PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .Versión actual; (gp $ p / $ v) .JavaHome
JohnP2
una cosa más, si su jdk estaba incluido con idea inteligente, podría estar cerca de la instalación de la idea. Para mí, estaba en el directorio de la carpeta 1 desde la carpeta de ideas, y la variable PATH apuntaba a un jre en Archivos de programa
KGS

Respuestas:

329

Si está utilizando Linux / Unix / Mac OS X:

Prueba esto:

$ which java

Debería mostrar la ubicación exacta.

Después de eso, puede establecer JAVA_HOMEla variable de entorno usted mismo.

En mi computadora (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

Si está utilizando Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
Pablo Santa Cruz
fuente
En realidad, el formulario% VAR_NAME% es Windows
sblundy
1
Se actualizó la respuesta con Linux / Unix / Mac OS X y ejemplos de Windows.
Pablo Santa Cruz
125
where javafunciona en Windows (al menos a partir de Windows 7) Pero si realmente desea un JDK y no un JRE, debe buscar en los directorios devueltos 'bin / javac /
Jon Strayer
donde java no da la ruta completa si java.exe está en la ruta, mientras que la solución de Pablo para ... lo hace es preferible.
Richard Johnson
1
MacOS one-liner:ls -l $(which java) | awk '{print $11}'
msanford
111

Windows> Inicio> cmd>

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

Si tiene un JDK instalado, se muestra la Ruta,
por ejemplo:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

grokster
fuente
16
Windows (7+) => where javac.exe
hB0
66
En Windows es, donde Java
Pabitra Dash
10
where javafunciona solo si el ejecutable está en la RUTA. Si por alguna razón, javac no está en la ruta, no devolverá ningún resultado, pero no significa que JDK no esté instalado. Entonces, en el caso general, la solución de búsqueda de archivos propuesta por la solución @grokster garantizará un resultado (la reflexión puede tomar tiempo para completarse).
Nikita G.
El material 'for-loop' no funcionó, sin embargo, lo encontré aquí: C: \ Archivos de programa (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Tenga en cuenta que si sigue este tutorial ( codelabs.developers.google.com/codelabs/… ) para usar Android Studio, la ruta real no sería la que devuelve el comando anterior. Lo más probable es que tenga algo como "C: \\ Program Files \ Java | <jdk>" donde en lugar de "jdk" tendría algo como "jdk-10.0.1" para JDK versión 10.
Euler_Salter
96

En Windows en el símbolo del sistema

where javac

NanoBennett
fuente
8
En Windows es, donde Java
Pabitra Dash
77
Tenga en cuenta que esto solo funciona si javac está en la RUTA. Si no es así, este comando dirá que no se encuentra, pero JDK aún podría instalarse. Utilice otros métodos si su RUTA no se ha actualizado después de la instalación de JDK.
Nikita G.
1
que otros metodos Usted mencionó el uso de% i en (javac.exe) do @echo. % ~ $ PATH: i , pero como escribiste, no funcionará si no lo configuraste en PATH.
Nimrod
30

En Windows, el valor predeterminado es: C:\Program Files\Java\jdk1.6.0_14(donde los números pueden diferir, ya que son la versión).

Ronen Rabinovici
fuente
¿Cómo recuperarías el número de versión diferente?
LZH
simplemente navegue a la ubicación de forma incremental desde su explorador, y verá la versión de la carpeta jdk que instaló.
ahnbizcad
26

El instalador de Java coloca varios archivos en la carpeta% WinDir% \ System32 (java.exe, javaws.exe y algunos otros). Cuando escribe java.exe en la línea de comandos o crea un proceso sin ruta completa, Windows los ejecuta como último recurso si faltan en las carpetas% PATH%.

Puede buscar todas las versiones de Java instaladas en el registro. Eche un vistazo a HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment y HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment para java de 32 bits en Windows de 64 bits.

Así es como Java descubre las diferentes versiones instaladas. Y es por eso que tanto la versión de 32 bits como la de 64 bits pueden coexistir y funcionan bien sin interferir.

Denis la amenaza
fuente
23

Simple y simple en plataformas Windows:

donde java

luccaa
fuente
8
Resulta en una ubicación incorrecta de Java C: \ WINDOWS \ System32 \ java.exe. Pero el jdk real está instalado en C: \ Java \ jdk1.7.0 \ (como JAVA_HOME está configurado)
Himanshu Bhardwaj
17

El siguiente script por lotes imprimirá el JRE predeterminado existente. Se puede modificar fácilmente para encontrar la versión JDK instalada reemplazando el Java Runtime Environment con 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
fuente
16

En Windows 10 puede encontrar la ruta yendo a Panel de control> Java. En el panel que aparece, puede encontrar la ruta como se muestra en la siguiente captura de pantalla. En el Panel de control de Java, vaya a la pestaña 'Java' y luego haga clic en el botón 'Ver' debajo de la descripción 'Ver y administrar versiones y configuraciones de Java Runtime para aplicaciones y applets de Java'.

Esto debería funcionar en Windows 7 y posiblemente en otras versiones recientes de Windows.

ingrese la descripción de la imagen aquí

smartexpert
fuente
Estoy en Windows 10 y no hay Java en el panel de control
Lang React Dev
1
¿Está seguro de que Java está instalado y se instaló utilizando el paquete de instalación de Windows?
smartexpert
Puede intentar mirar su cuenta y las variables de entorno del sistema para averiguar dónde se puede instalar Java, busque javacpl.exe
smartexpert
12

En un símbolo del sistema de Windows, simplemente escriba:

set java_home

O, si no le gusta el entorno de comando, puede verificarlo desde:

Menú Inicio> Computadora> Propiedades del sistema> Propiedades avanzadas del sistema. Luego abra la pestaña Avanzado> Variables de entorno y en la variable del sistema intente encontrar JAVA_HOME.

ingrese la descripción de la imagen aquí

AndroidDev
fuente
Esto me da la carpeta jdk. Cuando ejecuto System.getProperty ("java.home") en una Hoja de trabajo de Scala, me da la subcarpeta jre. Aparentemente hay cierta ambigüedad sobre Java Home.
Ion Freeman
11

En Windows, puedes usar

C:>dir /b /s java.exe

para imprimir la ruta completa de todos y cada uno de los "java.exe" en su unidad C: independientemente de si están en su variable de entorno PATH.

Thomas Bender
fuente
10

Más sobre Windows ... la variable java.home no siempre es la misma ubicación que el binario que se ejecuta.

Como dice Denis The Menace, el instalador coloca archivos Java en Archivos de programa , pero también java.exe en System32 . Sin nada relacionado con Java en la ruta, java -version todavía puede funcionar. Sin embargo, cuando se ejecuta el programa de PeterMmm, informa el valor de Archivos de programa como java.home , esto no está mal (Java está instalado allí), pero el binario real que se ejecuta se encuentra en System32 .

Una forma de buscar la ubicación del binario java.exe , agregue la siguiente línea al código de PeterMmm para mantener el programa funcionando un poco más:

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

Compile y ejecútelo, luego busque la ubicación de la imagen java.exe . Por ejemplo, en Windows 7, abra el administrador de tareas, busque la entrada java.exe , haga clic derecho y seleccione 'abrir ubicación de archivo', esto abre la ubicación exacta del binario Java. En este caso sería System32 .

Giros Moika
fuente
9

Ejecute este programa desde la línea 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
PeterMmm
fuente
44
¿No tendría que compilar esto primero?
Irwin
2
Eso encontrará un JRE si está instalado y en la ruta primero.
Jon Strayer
9

Powershell one liner:

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

¿Has intentado mirar tu variable% PATH%? Eso es lo que usa Windows para encontrar cualquier ejecutable.

sblundy
fuente
Sí. Echo %PATH%. El mío parece estar en c:\Program Files\JavaWindows 7
Mark Irvin
5

Solo ejecuta el set comando en su línea de comando. Luego verá todas las variables de entorno que ha establecido.

O si en Unix puedes simplificarlo:

$ set | grep "JAVA_HOME" 

fuente
Gracias Roflcoptr, fue realmente útil aprender sobre 'set'. En mi sistema, muestra dos entradas para la misma variable, ¿cómo puedo eliminar la incorrecta?
Ashine
3

Esto es específico del sistema operativo. En Unix:

which java

mostrará la ruta al ejecutable. No conozco un equivalente de Windows, pero generalmente tiene la bincarpeta de la instalación de JDK en el sistema PATH:

echo %PATH%
Michael Borgwardt
fuente
Yo también iba a dar esa respuesta, pero claramente está buscando una respuesta de Windows.
Don Branson el
@DonBranson Él cambió el texto para incluir Windows después de enviar esta publicación.
EntangledLoops
2

Ninguna de estas respuestas es correcta para Linux si está buscando el hogar que incluya subdirecciones como: bin, docs, include, jre, lib, etc.

En Ubuntu para openjdk1.8.0, esto está en: /usr/lib/jvm/java-1.8.0-openjdk-amd64

y es posible que prefiera usar eso JAVA_HOMEya que podrá encontrar encabezados si crea archivos fuente JNI. Si bien es cierto which java, proporcionará la ruta binaria, no es el verdadero hogar JDK.

Enredados
fuente
1

En macOS, ejecute:

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

En mi máquina, esto imprime:

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

Tenga en cuenta que la ejecución which javano muestra la ubicación de JDK, porque el javacomando es parte de JavaVM.framework, lo que envuelve el 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
fuente
0

en cmd de Windows:

set "JAVA_HOME" 
Husam
fuente
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 ventanas:

@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 enlace podría ayudar a explicar cómo encontrar el ejecutable de Java desde bash: http://srcode.org/2014/05/07/detect-java-executable/

Qian Chen
fuente
1
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia.
Shaiful Islam
1
Gracias @ShaifulIslam, tu punto es correcto. Agregué el código del enlace.
Qian Chen
0

He mejorado la respuesta de munsingh anterior al probar la clave de registro en registros de 64 bits y 32 bits, si es necesario:

::- 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%"

referencia para acceder al registro de 64 bits

JohnP2
fuente
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
fuente