ฉันจะค้นหาว่าติดตั้ง JDK บนเครื่อง windows ได้อย่างไร


303

ฉันต้องรู้ว่า JDK อยู่ที่ใดในเครื่องของฉัน

ในการทำงานJava -versionในcmdมันจะแสดงรุ่นเป็น '1.6.xx' หากต้องการค้นหาตำแหน่งของ SDK นี้บนเครื่องของฉันฉันพยายามใช้echo %JAVA_HOME%แต่จะแสดงเฉพาะ 'JAVA_HOME' (เนื่องจากไม่มีชุด 'JAVA_PATH' var ในตัวแปรสภาพแวดล้อมของฉัน)


1
น่าเสียดายที่ฉันคิดว่าคำตอบบางข้อด้านล่างอาจใช้ไม่ได้เพราะเห็นได้ชัดว่ามีบางสิ่งเปลี่ยนไปจาก Java เวอร์ชันล่าสุด วันนี้ฉันดาวน์โหลดเวอร์ชั่น 7.60 Java SDK หลังจากการค้นหาบางอย่างพบได้ที่ C: \ Program Files (x86) \ Java \ jdk1.7.0_60 มีเวอร์ชันเก่ากว่า 6 JRE ติดตั้งไว้แล้ว มันอยู่ที่ C: \ Program Files \ Java และนี่เป็นที่% PATH% ไม่ใช่การติดตั้งที่ใหม่กว่า
likejudo

1
คำตอบที่ดีที่สุดคือที่ด้านล่างหนึ่งซับจาก majkinetor สำหรับ PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2

อีกอย่างหนึ่งถ้า jdk ของคุณถูกรวมเข้ากับแนวคิด intellij มันอาจจะอยู่ที่ไหนสักแห่งใกล้กับการติดตั้งแนวคิด สำหรับฉันมันอยู่ในไดเรกทอรี 1 ของโฟลเดอร์ขึ้นมาจากโฟลเดอร์ความคิดและตัวแปร PATH ชี้ไปที่ jre ใน Program Files
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% เป็น Windows
sblundy

1
อัปเดตคำตอบด้วยตัวอย่าง Linux / Unix / Mac OS X และ Windows
Pablo Santa Cruz

125
where javaใช้งานได้ใน Windows (อย่างน้อยเป็น Windows 7) แต่ถ้าคุณต้องการ JDK จริง ๆ และไม่ใช่ JRE คุณต้องค้นหาในไดเรกทอรีที่ส่งคืนสำหรับ 'bin / javac /
Jon Strayer

ที่ java ไม่ได้ให้เส้นทางแบบเต็มหาก java.exe อยู่บนเส้นทางในขณะที่วิธีแก้ปัญหาของ Pablo สำหรับ ... นั้นเป็นที่นิยมมากกว่า
Richard Johnson

1
MacOS สายการบินls -l $(which java) | awk '{print $11}'
msanford

111

Windows> เริ่ม> cmd>

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

หากคุณมี JDK ติดตั้งอยู่ Path จะปรากฏขึ้น
ตัวอย่างเช่น:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe


16
Windows (7+) => โดยที่ javac.exe
hB0

6
ใน windows เป็นที่ที่ java
Pabitra Dash

10
where javaทำงานเฉพาะในกรณีที่ปฏิบัติการอยู่ในเส้นทาง หากไม่ว่าด้วยเหตุผลใดก็ตาม javac ไม่ได้อยู่ในพา ธ จะไม่ส่งคืนผลลัพธ์ใด ๆ แต่ไม่ได้หมายความว่าไม่ได้ติดตั้ง JDK ดังนั้นในกรณีทั่วไปโซลูชันการค้นหาไฟล์ที่เสนอโดยโซลูชัน @grokster จะรับประกันผลลัพธ์ (คิดว่าอาจต้องใช้เวลาดำเนินการจนเสร็จ)
Nikita G.

สิ่ง 'for-loop' ไม่ทำงาน แต่ฉันพบที่นี่: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

โปรดสังเกตว่าหากคุณกำลังติดตาม ( codelabs.developers.google.com/codelabs// ) กวดวิชานี้เพื่อใช้ android studio เส้นทางที่แท้จริงจะไม่ถูกส่งคืนโดยคำสั่งด้านบน เป็นไปได้มากที่คุณจะมีบางอย่างเช่น "C: \\ Program Files \ Java | <jdk>" โดยที่แทนที่จะเป็น "jdk" คุณจะมีบางอย่างเช่น "jdk-10.0.1" สำหรับ JDK เวอร์ชัน 10
Euler_Salter

96

ใน Windows ที่พรอมต์คำสั่ง

where javac


8
ใน windows เป็นที่ที่ java
Pabitra Dash

7
หมายเหตุจะใช้งานได้ก็ต่อเมื่อ javac อยู่ใน PATH หากไม่เป็นเช่นนั้นคำสั่งนี้จะบอกว่าไม่พบ แต่สามารถติดตั้ง JDK ได้ ใช้วิธีการอื่น ๆ หาก PATH ไม่ได้รับการปรับปรุงหลังจากการติดตั้ง JDK
Nikita G.

1
วิธีการอื่น ๆ คุณพูดถึงการใช้สำหรับ% i ใน (javac.exe) ทำ @echo % ~ $ PATH: iแต่ตามที่คุณเขียนมันจะไม่ทำงานหากคุณไม่ได้ตั้งไว้ใน PATH
Nimrod

30

ใน windows ค่าเริ่มต้นคือ: C:\Program Files\Java\jdk1.6.0_14(ซึ่งตัวเลขอาจแตกต่างกันตามที่พวกเขาเป็นรุ่น)


คุณจะดึงหมายเลขรุ่นที่แตกต่างกันอย่างไร
LZH

เพียงนำทางไปยังตำแหน่งที่เพิ่มขึ้นจาก explorer ของคุณและคุณจะเห็นรุ่นโฟลเดอร์ jdk ที่คุณติดตั้ง
ahnbizcad

26

ตัวติดตั้ง Java ทำให้หลายไฟล์ลงในโฟลเดอร์% WinDir% \ System32 (java.exe, javaws.exe และอื่น ๆ ) เมื่อคุณพิมพ์ java.exe ในบรรทัดคำสั่งหรือสร้างกระบวนการโดยไม่มีพา ธ เต็ม Windows จะใช้วิธีการเหล่านี้เป็นทางเลือกสุดท้ายหากไม่มีอยู่ในโฟลเดอร์% PATH%

คุณสามารถค้นหา Java ทุกรุ่นที่ติดตั้งในรีจิสตรี ดูสภาพแวดล้อมรันไทม์ของ HKLM \ SOFTWARE \ JavaSoft \ Java และสภาพแวดล้อมรันไทม์ HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java สำหรับจาวาแบบ 32 บิตบน Windows 64 บิต

นี่คือวิธีที่จาวาค้นพบเวอร์ชั่นที่แตกต่างกันของตัวเอง และนี่คือสาเหตุที่ทั้ง 32- บิตและ 64- บิตสามารถอยู่ร่วมกันและทำงานได้ดีโดยไม่รบกวน


23

ธรรมดาและเรียบง่ายบนแพลตฟอร์ม Windows:

ที่จาวา


8
ทำให้ตำแหน่ง Java ผิด C: \ WINDOWS \ System32 \ java.exe แต่ติดตั้ง jdk จริงที่ C: \ Java \ jdk1.7.0 \ (ตามที่มีการตั้งค่า JAVA_HOME)
Himanshu Bhardwaj

17

ชุดสคริปต์ด้านล่างจะพิมพ์ JRE เริ่มต้นที่มีอยู่ ก็สามารถที่จะแก้ไขได้อย่างง่ายดายเพื่อหาสิ่งที่รุ่น JDK ติดตั้งโดยการเปลี่ยนRuntime Environment Javaกับ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

16

ใน Windows 10 คุณสามารถค้นหาเส้นทางได้โดยไปที่แผงควบคุม> Java ในแผงควบคุมที่ปรากฏขึ้นคุณสามารถค้นหาเส้นทางตามที่แสดงในภาพหน้าจอด้านล่าง ในแผงควบคุม Java ไปที่แท็บ 'Java' จากนั้นคลิกปุ่ม 'ดู' ภายใต้คำอธิบาย 'ดูและจัดการเวอร์ชันและการตั้งค่า Java Runtime สำหรับแอปพลิเคชันและแอปเล็ต Java'

สิ่งนี้ควรใช้กับ Windows 7 และ Windows รุ่นล่าสุดอื่น ๆ

ป้อนคำอธิบายรูปภาพที่นี่


ฉันใช้ Windows 10 และไม่มีจาวาในแผงควบคุม
Lang React Dev

1
คุณแน่ใจว่าติดตั้ง Java และติดตั้งโดยใช้แพ็คเกจการติดตั้ง windows หรือไม่
smartexpert

คุณสามารถลองดูบัญชีของคุณและตัวแปรสภาพแวดล้อมของระบบเพื่อค้นหาตำแหน่งที่อาจติดตั้งจาวาค้นหา javacpl.exe
smartexpert

12

ในพรอมต์คำสั่ง Windows เพียงพิมพ์:

set java_home

หรือหากคุณไม่ชอบสภาพแวดล้อมคำสั่งคุณสามารถตรวจสอบได้จาก:

เมนูเริ่ม> คอมพิวเตอร์> คุณสมบัติของระบบ> คุณสมบัติระบบขั้นสูง จากนั้นเปิดแท็บขั้นสูง> ตัวแปรสภาพแวดล้อมและในตัวแปรระบบลองค้นหา JAVA_HOME

ป้อนคำอธิบายรูปภาพที่นี่


นี่ให้โฟลเดอร์ jdk แก่ฉัน เมื่อฉันเรียกใช้ System.getProperty ("java.home") ในแผ่นงาน Scala มันจะให้โฟลเดอร์ย่อย jre ให้ฉัน เห็นได้ชัดว่ามีความคลุมเครือเกี่ยวกับ Java Home
ไอออนฟรีแมน

11

ภายใต้ Windows คุณสามารถใช้

C:>dir /b /s java.exe

เพื่อพิมพ์เส้นทางแบบเต็มของแต่ละ "java.exe" บนไดรฟ์ C: โดยไม่คำนึงว่าอยู่ในตัวแปรสภาพแวดล้อม PATH ของคุณหรือไม่


10

เพิ่มเติมเกี่ยวกับตัวแปร Windows ... java.homeอาจไม่ใช่ตำแหน่งเดียวกับไบนารีที่รันอยู่เสมอ

ในฐานะที่เป็นเดนิสอันตรายกล่าวว่าทำให้ Java ติดตั้งไฟล์ลงในแฟ้มโปรแกรมแต่ยังjava.exeเข้าSystem32 โดยไม่มีสิ่งใดที่เกี่ยวข้องกับ 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

เรียกใช้โปรแกรมนี้จาก commandline:

// 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
เธอไม่ต้องรวบรวมสิ่งนี้ก่อนหรือไม่?
เออร์วิน

2
ที่จะค้นหา 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%. Mine ดูเหมือนจะอยู่c:\Program Files\Javaใน Windows 7
Mark Irvin

5

เพียงแค่รัน setคำสั่งในบรรทัดคำสั่งของคุณ จากนั้นคุณจะเห็นตัวแปรสภาพแวดล้อมทั้งหมดที่คุณตั้งไว้

หรือถ้าบน Unix คุณสามารถทำให้มันง่ายขึ้น:

$ set | grep "JAVA_HOME" 

ขอบคุณ Roflcoptr มันมีประโยชน์จริง ๆ ในการเรียนรู้เกี่ยวกับ 'set' ในระบบของฉันมันกำลังแสดงสองรายการสำหรับตัวแปรเดียวกันฉันจะลบรายการที่ไม่ถูกต้องได้อย่างไร
Ashine

3

นี่เป็นระบบปฏิบัติการเฉพาะ บน Unix:

which java

จะแสดงเส้นทางไปยังไฟล์ที่เรียกทำงานได้ ฉันไม่รู้จัก Windows เทียบเท่า แต่โดยทั่วไปคุณจะมีbinโฟลเดอร์ของการติดตั้ง JDK ในระบบPATH:

echo %PATH%

ฉันจะให้คำตอบนั้นด้วย แต่เขาก็มองหาคำตอบของ windows อย่างชัดเจน
Don Branson

@DonBranson เขาเปลี่ยนข้อความให้เป็น Windows หลังจากส่งบทความนี้แล้ว
EntangledLoops

2

คำตอบเหล่านี้ไม่ถูกต้องสำหรับ Linux หากคุณกำลังมองหาบ้านที่มีตำบลเช่น: bin, docs, include, jre, lib ฯลฯ

บน Ubuntu สำหรับ openjdk1.8.0 สิ่งนี้อยู่ใน: /usr/lib/jvm/java-1.8.0-openjdk-amd64

และคุณอาจต้องการใช้สิ่งนั้นJAVA_HOMEเนื่องจากคุณจะสามารถค้นหาส่วนหัวได้หากคุณสร้างไฟล์ต้นฉบับ JNI ในขณะที่มันเป็นความจริง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

โปรดทราบว่าการรัน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

สำหรับ 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

ลิงค์นี้อาจช่วยอธิบายวิธีค้นหาจาวาที่สามารถเรียกใช้งานได้จาก bash: http://srcode.org/2014/05/07/detect-java-executable/


1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง
ศาสนาอิสลาม Shaiful

1
ขอบคุณ @ShaifulIslam จุดของคุณถูกต้อง ฉันเพิ่มรหัสจากลิงค์
Qian Chen

0

ฉันได้ปรับปรุงคำตอบของmunsinghข้างต้นโดยการทดสอบคีย์รีจิสทรีในการลงทะเบียน 64- บิตและ 32- บิตถ้าจำเป็น:

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

สคริปต์สำหรับ Windows 32/64 บิต

@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.