Windows 시스템에서 JDK가 설치된 위치를 어떻게 찾을 수 있습니까?


303

내 컴퓨터에서 JDK가 어디에 있는지 알아야합니다.

실행에 Java -versioncmd를 , 그것은 '1.6.xx'와 같은 버전을 보여줍니다. 내 컴퓨터 에서이 SDK의 위치를 ​​찾으려면 사용 echo %JAVA_HOME%했지만 'JAVA_HOME'만 표시됩니다 (환경 변수에 'JAVA_PATH'변수가 설정되어 있지 않기 때문에).


1
불행히도, 최신 버전의 Java로 변경된 것이 있기 때문에 아래 답변 중 일부가 작동하지 않을 수 있다고 생각합니다. 오늘 저는 버전 7.60 Java SDK를 다운로드했습니다. 일부 검색 후 C : \ Program Files (x86) \ Java \ jdk1.7.0_60에서 찾았습니다. 이전 버전 6 JRE가 이미 설치되어 있습니다. C : \ Program Files \ Java에 있으며 최신 설치가 아닌 % PATH %에있었습니다.
likejudo 2016 년

1
가장 좋은 대답은 맨 아래에 PowerShell 용 majkinetor의 한 줄짜리입니다. $ p = 'HKLM : \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p). 현재 버전; (gp $ p / $ v) .JavaHome
JohnP2

한 가지 더, jdk가 intellij 아이디어와 번들로 제공된다면 아이디어 설치 근처에있을 수 있습니다. 나를 위해 그것은 아이디어 폴더에서 폴더 1 디렉토리에 있었고 PATH 변수는 Program Files의 jre를 가리 켰습니다
KGS

답변:


329

Linux / Unix / Mac OS X를 사용하는 경우 :

이 시도:

$ which java

정확한 위치를 출력해야합니다.

그 후 JAVA_HOME환경 변수를 직접 설정할 수 있습니다 .

내 컴퓨터 (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

Windows를 사용하는 경우 :

c:\> for %i in (java.exe) do @echo.   %~$PATH:i

실제로 %
VAR_NAME

1
Linux / Unix / Mac OS X Windows 예제로 답변을 업데이트했습니다 .
Pablo Santa Cruz

125
where javaWindows에서 작동합니다 (적어도 Windows 7부터).하지만 JRE가 아닌 JDK를 원한다면 반환 된 디렉토리에서 'bin / javac /
Jon Strayer

java.exe가 경로에있는 경우 java는 전체 경로를 제공하지 않지만 Pablo의 for ... 솔루션은 바람직합니다.
Richard Johnson

1
MacOS one-liner :ls -l $(which java) | awk '{print $11}'
msanford

111

Windows> 시작> cmd>

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

JDK가 설치된 경우 경로는 다음과 같이 표시됩니다
.C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe


16
Windows (7+) => 여기서 javac.exe
hB0

6
윈도우에서 그것은 어디에 자바
Pabitra Dash

10
where java실행 파일이 PATH에있는 경우에만 작동합니다. 어떤 이유로 든 javac가 경로에 없으면 결과를 반환하지 않지만 JDK가 설치되지 않았다는 의미는 아닙니다. 따라서 일반적으로 @grokster 솔루션에서 제안한 파일 검색 솔루션은 결과를 보장합니다 (완료하는 데 시간이 걸릴 수 있음).
Nikita G.

'for-loop'항목이 작동하지 않았지만 여기에서 찾았습니다. C : \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

android studio를 사용 하기 위해이 ( codelabs.developers.google.com/codelabs/… ) 자습서를 따르는 경우 실제 경로는 위 명령에서 반환 된 경로가 아닙니다. "jdk"대신 JDK 버전 10의 경우 "jdk-10.0.1"과 같은 "C : \\ Program Files \ Java | <jdk>"와 같은 것이있을 것입니다.
Euler_Salter

96

Windows의 명령 프롬프트에서

where javac


8
윈도우에서 그것은 어디에 자바
Pabitra Dash

7
javac가 PATH에있는 경우에만 작동합니다. 그렇지 않은 경우이 명령은 찾을 수 없다고 말하지만 JDK를 여전히 설치할 수 있습니다. JDK 설치 후 PATH가 업데이트되지 않은 경우 다른 방법을 사용하십시오.
Nikita G.

1
다른 방법은? (javac.exe) do @echo에서 % i 사용 언급했습니다 . % ~ $ PATH : i , 그러나 PATH에 설정하지 않으면 작동하지 않습니다.
님로드

30

Windows에서 기본값은 다음과 같습니다 C:\Program Files\Java\jdk1.6.0_14(숫자 버전이므로 숫자가 다를 수 있음).


다른 버전 번호를 어떻게 검색 하시겠습니까?
LZH

탐색기에서 점진적으로 위치를 탐색하면 설치 한 jdk 폴더 버전이 표시됩니다.
ahnbizcad

26

Java 설치 프로그램은 여러 파일을 % WinDir % \ System32 폴더 (java.exe, javaws.exe 및 기타 파일)에 저장합니다. 명령 행에 java.exe를 입력하거나 전체 경로없이 프로세스를 작성할 때 Windows는 % PATH % 폴더에 누락 된 경우이를 최후 수단으로 실행합니다.

레지스트리에 설치된 모든 Java 버전을 조회 할 수 있습니다. 64 비트 Windows에서 32 비트 Java에 대한 HKLM \ SOFTWARE \ JavaSoft \ Java 런타임 환경 및 HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java 런타임 환경을 살펴보십시오.

이것은 자바 자체가 설치된 다른 버전을 찾는 방법입니다. 그리고 이것이 32 비트와 64 비트 버전이 공존 할 수 있고 방해하지 않고 잘 작동하는 이유입니다.


23

Windows 플랫폼에서 간단하고 간단합니다.

어디 자바


8
잘못된 Java 위치 C : \ WINDOWS \ System32 \ java.exe가 발생합니다. 그러나 실제 JDK는 C에 설치 : \ 자바 \ jdk1.7.0 \ (JAVA_HOME이 설정되어)
Himanshu Bhardwaj의이

17

아래의 배치 스크립트는 기존 기본 JRE를 인쇄합니다. Java Runtime EnvironmentJava Development Kit 로 교체하여 설치된 JDK 버전을 찾도록 쉽게 수정할 수 있습니다 .

@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

16

Windows 10에서는 제어판> Java로 이동하여 경로를 찾을 수 있습니다. 표시되는 패널에서 아래 스크린 샷에 표시된대로 경로를 찾을 수 있습니다. Java 제어판에서 'Java'탭으로 이동 한 다음 'Java 응용 프로그램 및 애플릿의 Java 런타임 버전 및 설정보기 및 관리'설명에서 '보기'단추를 클릭하십시오.

이것은 Windows 7 및 다른 최신 버전의 Windows에서 작동합니다.

여기에 이미지 설명을 입력하십시오


나는 창 10에 있고 제어판에 자바가 없다
Lang React Dev

1
Java가 설치되었고 Windows 설치 패키지를 사용하여 설치 되었습니까?
smartexpert

자바가 설치되어있을 수 있습니다 어디 javacpl.exe에 대해 알아 보려면 계정 및 시스템 환경 변수에서 찾는 모습을 시도 할 수 있습니다
smartexpert

12

Windows 명령 프롬프트에서 다음을 입력하십시오.

set java_home

또는 명령 환경이 마음에 들지 않으면 다음에서 확인할 수 있습니다.

시작 메뉴> 컴퓨터> 시스템 속성> 고급 시스템 속성 그런 다음 고급 탭> 환경 변수를 열고 시스템 변수에서 JAVA_HOME을 찾으십시오.

여기에 이미지 설명을 입력하십시오


이것은 jdk 폴더를 제공합니다. Scala Worksheet에서 System.getProperty ( "java.home")를 실행하면 jre 하위 폴더가 제공됩니다. Java Home에 대해서는 약간의 모호성이 있습니다.
Ion Freeman

11

Windows에서는 다음을 사용할 수 있습니다

C:>dir /b /s java.exe

PATH 환경 변수에 관계없이 C : 드라이브에있는 모든 "java.exe"의 전체 경로를 인쇄합니다.


10

Windows에 대한 추가 정보 ... 변수 java.home 이 실행되는 바이너리와 항상 동일한 위치에있는 것은 아닙니다.

Denis The Menace가 말했듯이 설치 프로그램은 Java 파일을 Program Files에 넣지 만 java.exeSystem32에 넣습니다 . 경로와 관련된 Java가 없으면 java -version 은 여전히 ​​작동합니다. 그러나 PeterMmm의 프로그램이 실행될 때 Program Files 의 값을 java.home 으로 보고 하지만 이는 잘못된 것이 아니며 (Java가 설치되어 있음) 실제 실행중인 바이너리는 System32에 있습니다.

java.exe 바이너리 의 위치를 ​​찾는 한 가지 방법은 PeterMmm의 코드에 다음 줄을 추가하여 프로그램을 더 오래 실행시키는 것입니다.

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

컴파일하고 실행 한 다음 java.exe 이미지 의 위치를 찾으십시오 . 예를 들어 Windows 7에서 작업 관리자를 열고 java.exe 항목을 찾은 다음 마우스 오른쪽 버튼을 클릭하고 '파일 위치 열기'를 선택하면 Java 바이너리의 정확한 위치가 열립니다. 이 경우 System32 입니다.


9

명령 행에서이 프로그램을 실행하십시오.

// File: Main.java
public class Main {

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

}


$ javac Main.java
$ java Main

4
그녀는 이것을 먼저 컴파일하지 않아도 될까요?
Irwin

2
JRE가 설치되어 있고 경로에 먼저 있으면 JRE를 찾을 수 있습니다.
Jon Strayer

9

Powershell 원 라이너 :

$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome

1
JDK 11 사용$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis

6

% PATH % 변수를 보셨습니까? 그것이 Windows가 실행 파일을 찾기 위해 사용하는 것입니다.


네. Echo %PATH%. 광산은 c:\Program Files\JavaWindows 7에 있는 것 같습니다
Mark Irvin

5

set명령 행에서 명령을 실행하십시오 . 그런 다음 설정 한 모든 환경 변수가 표시됩니다.

또는 유닉스에서는 다음과 같이 단순화 할 수 있습니다.

$ set | grep "JAVA_HOME" 

감사합니다 Roflcoptr, 'set'에 대해 배우는 것이 실제로 유용했습니다. 내 시스템에서 동일한 변수에 대한 두 개의 항목이 표시됩니다. 잘못된 항목을 어떻게 삭제할 수 있습니까?
Ashine

3

이것은 OS마다 다릅니다. 유닉스에서 :

which java

실행 파일의 경로를 표시합니다. Windows에 해당하는 것을 모르지만 일반적으로 bin시스템에 JDK 설치 폴더가 있습니다 PATH.

echo %PATH%

나도 그 대답을하려고했지만 그는 분명히 윈도우 답변을 찾고 있습니다.
돈 브랜슨

@DonBranson 그는이 게시물이 제출 된 후 Windows를 포함하도록 텍스트를 변경했습니다.
EntangledLoops

2

bin, docs, include, jre, lib 등과 같은 하위 디렉토리를 포함하는 홈을 찾는 경우 Linux에 대한 올바른 답변은 없습니다.

openjdk1.8.0의 우분투에서 이것은 다음과 같습니다. /usr/lib/jvm/java-1.8.0-openjdk-amd64

JAVA_HOMEJNI 소스 파일을 빌드하면 헤더를 찾을 수 있기 때문에 이를 사용하는 것이 좋습니다 . which java이진 경로를 제공 하는 것이 사실이지만 , 진정한 JDK 홈은 아닙니다.


1

macOS에서 다음을 실행하십시오.

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

내 컴퓨터에서 다음을 인쇄합니다.

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

running which java은 JDK 위치를 표시하지 않습니다. java명령은 대신 JavaVM.framework실제 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


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

창문 :

@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

이 링크는 bash에서 Java 실행 파일을 찾는 방법을 설명하는 데 도움이 될 수 있습니다. http://srcode.org/2014/05/07/detect-java- executable /


1
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Shaiful Islam 2016 년

1
@ShaifulIslam에게 감사합니다. 요점이 맞습니다. 링크에서 코드를 추가했습니다.
Qian Chen

0

필요한 경우 64 비트 및 32 비트 레지스트리에서 레지스트리 키를 테스트하여 위의 munsingh 의 답변 을 개선 했습니다 .

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

64 비트 레지스트리에 액세스하기위한 참조


0

32/64 비트 Windows 용 스크립트.

@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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.