Bagaimana saya menemukan di mana JDK diinstal pada mesin windows saya?

303

Saya perlu tahu di mana JDK berada di komputer saya.

Saat berjalan Java -versiondalam cmd , ini menunjukkan versi sebagai '1.6.xx'. Untuk menemukan lokasi SDK ini di komputer saya, saya mencoba menggunakan echo %JAVA_HOME%tetapi hanya menunjukkan 'JAVA_HOME' (karena tidak ada var 'JAVA_PATH' dalam variabel lingkungan saya).

Ashine
sumber
1
Sayangnya, saya pikir beberapa jawaban di bawah ini mungkin tidak berfungsi karena ternyata ada yang berubah dengan versi Java yang lebih baru. Hari ini saya mengunduh Java SDK versi 7.60. Setelah beberapa pencarian, temukan di C: \ Program Files (x86) \ Java \ jdk1.7.0_60. Ada JRE versi 6 yang lebih lama sudah diinstal. Itu di C: \ Program Files \ Java dan ini di% PATH% bukan instalasi yang lebih baru.
likejudo
1
Jawaban terbaik adalah di bagian bawah, satu-liner dari majkinetor untuk PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .CurrentVersion; (gp $ p / $ v) .JavaHome
JohnP2
satu hal lagi, jika jdk Anda dibundel dengan ide intellij, itu bisa berada di dekat instalasi ide. Bagi saya itu dalam direktori folder 1 naik dari folder ide, dan variabel PATH menunjuk ke jre di Program Files
KGS

Jawaban:

329

Jika Anda menggunakan Linux / Unix / Mac OS X:

Coba ini:

$ which java

Harus menampilkan lokasi yang tepat.

Setelah itu, Anda dapat mengatur JAVA_HOMEsendiri variabel lingkungan.

Di komputer saya (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

Jika Anda menggunakan Windows:

c:\> for %i in (java.exe) do @echo.   %~$PATH:i
Pablo Santa Cruz
sumber
Sebenarnya, bentuk% VAR_NAME% adalah Windows
sblundy
1
Diperbarui jawabannya dengan Linux / Unix / Mac OS X dan contoh Windows.
Pablo Santa Cruz
125
where javaberfungsi di Windows (setidaknya pada Windows 7) Tetapi jika Anda benar-benar menginginkan JDK dan bukan JRE, Anda perlu mencari di direktori yang dikembalikan untuk 'bin / javac /
Jon Strayer
di mana java tidak memberikan path lengkap jika java.exe ada di Path, sedangkan Pablo's for ... solusi melakukannya lebih disukai.
Richard Johnson
1
MacOS one-liner:ls -l $(which java) | awk '{print $11}'
msanford
111

Windows> Mulai> cmd>

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

Jika Anda memiliki JDK diinstal, Path ditampilkan,
misalnya:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe

pengemis
sumber
16
Windows (7+) => di mana javac.exe
hB0
6
Di windows itu, di mana java
Pabitra Dash
10
where javahanya berfungsi jika executable ada di PATH. Jika karena alasan apa pun, javac tidak ada di jalur, itu tidak akan mengembalikan hasil apa pun, tetapi itu tidak berarti JDK tidak diinstal. Jadi dalam kasus umum, solusi pencarian file yang diajukan oleh solusi @ grokster akan menjamin hasil (pemikiran mungkin membutuhkan waktu untuk menyelesaikannya).
Nikita G.
Namun 'for-loop' tidak berfungsi, saya menemukannya di sini: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar
Perhatikan bahwa jika Anda mengikuti tutorial ini ( codelabs.developers.google.com/codelabs/... ) untuk menggunakan android studio, jalur sebenarnya bukanlah apa yang dikembalikan oleh perintah di atas. Kemungkinan besar, Anda akan memiliki sesuatu seperti "C: \\ Program Files \ Java | <jdk>" di mana alih-alih "jdk" Anda akan memiliki sesuatu seperti "jdk-10.0.1" untuk JDK versi 10.
Euler_Salter
96

Di Windows pada command prompt

where javac

NanoBennett
sumber
8
Di windows itu, di mana java
Pabitra Dash
7
Catatan, ini hanya berfungsi jika javac ada di PATH. Jika tidak, perintah ini akan mengatakan bahwa itu tidak ditemukan, tetapi JDK masih dapat diinstal. Gunakan metode lain jika PATH Anda belum diperbarui setelah instalasi JDK.
Nikita G.
1
apa metode lain? Anda sebutkan menggunakan untuk% i di (javac.exe) do @echo. % ~ $ PATH: i , tetapi ketika Anda menulis, itu tidak akan berfungsi jika Anda tidak mengaturnya di PATH.
Nimrod
30

Di windows defaultnya adalah: C:\Program Files\Java\jdk1.6.0_14(di mana angkanya mungkin berbeda, karena mereka adalah versinya).

Ronen Rabinovici
sumber
bagaimana Anda mengambil nomor versi yang berbeda?
LZH
arahkan saja ke lokasi secara bertahap dari penjelajah Anda, dan Anda akan melihat versi folder jdk yang Anda instal.
ahnbizcad
26

Pemasang Java menempatkan beberapa file ke folder% WinDir% \ System32 (java.exe, javaws.exe dan beberapa lainnya). Ketika Anda mengetik java.exe di baris perintah atau membuat proses tanpa path lengkap, Windows menjalankan ini sebagai pilihan terakhir jika ada yang hilang di folder% PATH%.

Anda dapat mencari semua versi Java yang terinstal di registri. Lihatlah HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Environment dan HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Environment untuk 32-bit java pada 64-bit Windows pada Windows 64 bit.

Ini adalah bagaimana java itu sendiri mengetahui berbagai versi diinstal. Dan inilah mengapa versi 32-bit dan 64-bit dapat hidup berdampingan dan bekerja dengan baik tanpa mengganggu.

Denis The Menace
sumber
23

Sederhana dan sederhana pada platform Windows:

dimana java

luccaa
sumber
8
Ini menghasilkan lokasi Java yang salah C: \ WINDOWS \ System32 \ java.exe. Tetapi jdk sebenarnya diinstal di C: \ Java \ jdk1.7.0 \ (sebagaimana JAVA_HOME diatur)
Himanshu Bhardwaj
17

Skrip batch di bawah ini akan mencetak JRE default yang ada. Ini dapat dengan mudah dimodifikasi untuk menemukan versi JDK diinstal dengan mengganti Java Runtime Environment dengan 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
sumber
16

Pada Windows 10 Anda dapat menemukan jalan dengan pergi ke Control Panel> Java. Di panel yang muncul, Anda dapat menemukan jalur seperti yang ditunjukkan pada tangkapan layar di bawah ini. Di Java Control Panel, buka tab 'Java' lalu klik tombol 'Lihat' di bawah deskripsi 'Lihat dan kelola versi dan pengaturan Java Runtime untuk aplikasi dan applet Java.'

Ini harus bekerja pada Windows 7 dan mungkin versi Windows terbaru lainnya.

masukkan deskripsi gambar di sini

smartexpert
sumber
Saya di windows 10 dan tidak ada java di panel kontrol
Lang React Dev
1
Apakah Anda yakin Java telah diinstal dan diinstal menggunakan paket instalasi windows?
smartexpert
Anda dapat mencoba melihat variabel lingkungan akun dan sistem Anda untuk mengetahui di mana java mungkin diinstal, cari javacpl.exe
smartexpert
12

Di prompt perintah Windows, cukup ketik:

set java_home

Atau, jika Anda tidak menyukai lingkungan perintah, Anda dapat memeriksanya dari:

Menu Mulai> Komputer> Properti Sistem> Properti Sistem Lanjutan. Kemudian buka tab Advanced> Variabel Lingkungan dan dalam variabel sistem coba cari JAVA_HOME.

masukkan deskripsi gambar di sini

AndroidDev
sumber
Ini memberi saya folder jdk. Ketika saya menjalankan System.getProperty ("java.home") dalam Lembar Kerja Scala, itu memberi saya subfolder jre. Tampaknya ada beberapa ambiguitas tentang Java Home.
Ion Freeman
11

Di bawah Windows, Anda dapat menggunakan

C:>dir /b /s java.exe

untuk mencetak path lengkap masing-masing dan setiap "java.exe" di drive C: Anda, terlepas dari apakah mereka berada di variabel lingkungan PATH Anda.

Thomas Bender
sumber
10

Lebih lanjut tentang Windows ... variabel java.home tidak selalu lokasi yang sama dengan biner yang dijalankan.

Seperti yang dikatakan Denis The Menace, penginstal menempatkan file Java ke dalam Program Files , tetapi juga java.exe ke System32 . Dengan tidak ada yang terkait Java di jalur java-versi masih bisa bekerja. Namun ketika program PeterMmm dijalankan, ia melaporkan nilai Program Files sebagai java.home , ini tidak salah (Java diinstal di sana) tetapi biner aktual yang dijalankan terletak di System32 .

Salah satu cara untuk memburu lokasi biner java.exe , tambahkan baris berikut ke kode PeterMmm untuk menjaga program berjalan lebih lama:

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

Kompilasi dan jalankan, lalu cari lokasi gambar java.exe . Misalnya di Windows 7 buka task manager, temukan entri java.exe , klik kanan dan pilih 'buka file lokasi', ini membuka lokasi yang tepat dari biner Java. Dalam hal ini adalah System32 .

Ternyata Moika
sumber
9

Jalankan program ini dari 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
PeterMmm
sumber
4
bukankah dia harus menyusun ini dulu?
Irwin
2
Itu akan menemukan JRE jika diinstal dan di jalan terlebih dahulu.
Jon Strayer
9

Powershell one liner:

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

Sudahkah Anda mencoba melihat variabel% PATH% Anda. Itulah yang digunakan Windows untuk menemukan yang dapat dieksekusi.

merah muda
sumber
Ya. Echo %PATH%. Punyaku sepertinya ada di c:\Program Files\JavaWindows 7
Mark Irvin
5

Cukup jalankan setperintah di baris perintah Anda. Kemudian Anda melihat semua variabel lingkungan yang telah Anda tetapkan.

Atau jika di Unix Anda dapat menyederhanakannya:

$ set | grep "JAVA_HOME" 

sumber
Terima kasih Roflcoptr, itu memang berguna untuk belajar tentang 'set'. Dalam sistem saya ini menunjukkan dua entri untuk variabel yang sama, bagaimana saya bisa menghapus yang salah.
Ashine
3

Ini adalah OS khusus. Di Unix:

which java

akan menampilkan path ke executable. Saya tidak tahu setara dengan Windows, tetapi di sana Anda biasanya memiliki binfolder instalasi JDK di sistem PATH:

echo %PATH%
Michael Borgwardt
sumber
Saya akan memberikan jawaban itu juga, tapi dia jelas mencari jawaban windows.
Don Branson
@ DonBranson Dia mengubah teks untuk memasukkan Windows setelah posting ini dikirimkan.
EntangledLoops
2

Tidak satu pun dari jawaban ini yang benar untuk Linux jika Anda mencari rumah yang menyertakan subdir seperti: bin, docs, include, jre, lib, dll.

Di Ubuntu untuk openjdk1.8.0, ini ada di: /usr/lib/jvm/java-1.8.0-openjdk-amd64

dan Anda mungkin lebih suka menggunakannya JAVA_HOMEkarena Anda akan dapat menemukan header jika Anda membangun file sumber JNI. Meskipun benar which javaakan menyediakan path biner, itu bukan rumah JDK yang sebenarnya.

TerikatLoops
sumber
1

Di macOS, jalankan:

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

Di mesin saya, ini mencetak:

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

Perhatikan bahwa menjalankan which javatidak menunjukkan lokasi JDK, karena javaperintah itu bukan bagian dari JavaVM.framework, yang membungkus JDK nyata:

$ 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
sumber
0

di Windows cmd:

set "JAVA_HOME" 
Husam
sumber
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

Untuk 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

Tautan ini mungkin membantu menjelaskan cara menemukan java yang dapat dieksekusi dari bash: http://srcode.org/2014/05/07/detect-java-executable/

Qian Chen
sumber
1
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
Shaiful Islam
1
Terima kasih @ShaifulIslam, poin Anda tepat. Saya menambahkan kode dari tautan.
Qian Chen
0

Saya telah meningkatkan jawaban munsingh di atas dengan menguji kunci registri dalam registrasi 64-bit dan 32-bit, jika diperlukan:

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

referensi untuk akses ke registri 64-bit

JohnP2
sumber
0

Script untuk Windows 32/64 bit.

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