Làm cách nào để tìm nơi JDK được cài đặt trên máy tính windows của tôi?


303

Tôi cần biết JDK nằm ở đâu trên máy của tôi.

Khi chạy Java -versiontrong cmd , nó hiển thị phiên bản là '1.6.xx'. Để tìm vị trí của SDK này trên máy của tôi, tôi đã thử sử dụng echo %JAVA_HOME%nhưng nó chỉ hiển thị 'JAVA_HOME' (vì không có var 'JAVA_PATH' trong các biến môi trường của tôi).


1
thật không may, tôi nghĩ rằng một số câu trả lời dưới đây có thể không hoạt động vì rõ ràng có gì đó đã thay đổi với các phiên bản Java gần đây hơn. Hôm nay tôi đã tải xuống phiên bản 7.60 Java SDK. Sau khi tìm kiếm, tìm thấy nó tại C: \ Program Files (x86) \ Java \ jdk1.7.0_60. Đã có phiên bản 6 JRE cũ hơn được cài đặt. Đó là tại C: \ Program Files \ Java và đây là trên% PATH% không phải là bản cài đặt mới hơn.
likejudo

1
Câu trả lời tốt nhất nằm ở phía dưới, một lớp lót từ majkinetor cho PowerShell: $ p = 'HKLM: \ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v = (gp $ p) .C HiệnVersion; (gp $ p / $ v) .JavaHome
JohnP2

một điều nữa, nếu jdk của bạn được gói với ý tưởng intellij, nó có thể ở đâu đó gần cài đặt ý tưởng. Đối với tôi, nó nằm trong thư mục 1 thư mục từ thư mục ý tưởng và biến PATH đã chỉ ra một jre trong Tệp chương trình
KGS

Câu trả lời:


329

Nếu bạn đang sử dụng Linux / Unix / Mac OS X:

Thử cái này:

$ which java

Nên xuất vị trí chính xác.

Sau đó, bạn có thể tự đặt JAVA_HOMEbiến môi trường.

Trong máy tính của tôi (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

Nếu bạn đang sử dụng Windows:

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

Trên thực tế, mẫu% VAR_NAME% là Windows
sblundy

1
Đã cập nhật câu trả lời với các ví dụ Linux / Unix / Mac OS X Windows.
Pablo Santa Cruz

125
where javahoạt động trong Windows (ít nhất là Windows 7) Nhưng nếu bạn thực sự muốn có JDK chứ không phải JRE, bạn cần tìm trong các thư mục được trả về cho 'bin / javac /
Jon Strayer

trong đó java không cung cấp đường dẫn đầy đủ nếu java.exe nằm trên Đường dẫn, trong khi giải pháp Pablo cho ... thì làm như vậy là thích hợp hơn.
Richard Johnson

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

111

Windows> Bắt đầu> cmd>

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

Nếu bạn đã cài đặt JDK,
ví dụ: Đường dẫn được hiển thị :C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe


16
Windows (7+) => trong đó javac.exe
hB0

6
Trong cửa sổ, nơi java
Pabitra Dash

10
where javachỉ hoạt động nếu tệp thực thi nằm trong PATH. Nếu vì bất kỳ lý do gì, javac không nằm trong đường dẫn, nó sẽ không trả về bất kỳ kết quả nào, nhưng điều đó không có nghĩa là JDK chưa được cài đặt. Vì vậy, trong trường hợp chung, giải pháp tìm kiếm tệp được đề xuất bởi giải pháp @grokster sẽ đảm bảo kết quả (có thể mất thời gian để hoàn thành).
Nikita G.

Tuy nhiên, công cụ 'for-loop' không hoạt động, tôi đã tìm thấy nó ở đây: C: \ Program Files (x86) \ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

Lưu ý rằng nếu bạn đang theo hướng dẫn này ( codelabs.developers.google.com/codelabs/, ) để sử dụng android studio, đường dẫn thực tế sẽ không phải là thứ được trả về bởi lệnh trên. Rất có thể, bạn sẽ có một cái gì đó như "C: \\ Chương trình tập tin \ Java | <jdk>" trong đó thay vì "jdk", bạn sẽ có một cái gì đó như "jdk-10.0.1" cho phiên bản JDK 10.
Euler_Salter

96

Trong Windows tại dấu nhắc lệnh

where javac


8
Trong cửa sổ, đó là nơi java
Pabitra Dash

7
Lưu ý, điều này chỉ hoạt động nếu javac nằm trong PATH. Nếu không, lệnh này sẽ nói rằng nó không được tìm thấy, nhưng JDK vẫn có thể được cài đặt. Sử dụng các phương thức khác nếu PATH của bạn chưa được cập nhật sau khi cài đặt JDK.
Nikita G.

1
phương pháp nào khác? Bạn đã đề cập bằng cách sử dụng % i trong (javac.exe) do @echo. % ~ $ PATH: i , nhưng như bạn đã viết, nó sẽ không hoạt động nếu bạn không đặt nó trong PATH.
Nimrod

30

Trong các cửa sổ, mặc định là: C:\Program Files\Java\jdk1.6.0_14(trong đó các số có thể khác nhau, vì chúng là phiên bản).


Làm thế nào bạn sẽ lấy lại số phiên bản khác nhau?
LZH

chỉ cần điều hướng đến vị trí tăng dần từ trình thám hiểm của bạn và bạn sẽ thấy phiên bản thư mục jdk mà bạn đã cài đặt.
ahnbizcad 04/05/2015

26

Trình cài đặt Java đặt một số tệp vào thư mục% WinDir% \ System32 (java.exe, javaws.exe và một số tệp khác). Khi bạn nhập java.exe trong dòng lệnh hoặc tạo quy trình mà không có đường dẫn đầy đủ, Windows sẽ chạy chúng như là phương sách cuối cùng nếu chúng bị thiếu trong các thư mục% PATH%.

Bạn có thể tra cứu tất cả các phiên bản Java được cài đặt trong registry. Hãy xem HKLM \ SOFTWARE \ JavaSoft \ Java Runtime Môi trường và HKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Java Runtime Môi trường cho java 32 bit trên Windows 64 bit.

Đây là cách java tự tìm ra các phiên bản khác nhau được cài đặt. Và đây là lý do tại sao cả phiên bản 32 bit và 64 bit có thể cùng tồn tại và hoạt động tốt mà không bị can thiệp.


23

Đơn giản và đơn giản trên nền tảng Windows:

java ở đâu


8
Nó dẫn đến vị trí Java sai C: \ WINDOWS \ System32 \ java.exe. Nhưng jdk thực tế được cài đặt tại C: \ Java \ jdk1.7.0 \ (khi JAVA_HOME được đặt)
Himanshu Bhardwaj

17

Tập lệnh bó bên dưới sẽ in ra JRE mặc định hiện có. Có thể dễ dàng sửa đổi để tìm phiên bản JDK được cài đặt bằng cách thay thế Môi trường chạy thi hành Java bằng Bộ công cụ phát triển 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

16

Trên Windows 10, bạn có thể tìm ra đường dẫn bằng cách vào Bảng điều khiển> Java. Trong bảng điều khiển hiển thị, bạn có thể tìm thấy đường dẫn như được minh họa trong ảnh chụp màn hình bên dưới. Trong Bảng điều khiển Java, đi tới tab 'Java' và sau đó nhấp vào nút 'Xem' bên dưới phần mô tả 'Xem và quản lý các phiên bản và cài đặt Java Runtime cho các ứng dụng và ứng dụng Java.'

Điều này sẽ hoạt động trên Windows 7 và có thể các phiên bản Windows gần đây khác.

nhập mô tả hình ảnh ở đây


Tôi đang ở trên windows 10 và không có java trong bảng điều khiển
Lang React Dev

1
Bạn có chắc chắn Java đã được cài đặt và nó đã được cài đặt bằng gói cài đặt windows?
smartexpert

Bạn có thể thử nhìn vào các biến tài khoản và môi trường hệ thống của bạn để tìm hiểu nơi java có thể được cài đặt, hãy tìm javacpl.exe
smartexpert

12

Trong dấu nhắc lệnh của Windows, chỉ cần gõ:

set java_home

Hoặc, nếu bạn không thích môi trường lệnh, bạn có thể kiểm tra nó từ:

Menu bắt đầu> Máy tính> Thuộc tính hệ thống> Thuộc tính hệ thống nâng cao. Sau đó mở tab Nâng cao> Biến môi trường và trong biến hệ thống, hãy thử tìm JAVA_HOME.

nhập mô tả hình ảnh ở đây


Điều này cho tôi thư mục jdk. Khi tôi chạy System.getProperty ("java.home") trong Bảng tính Scala, nó sẽ cho tôi thư mục con jre. Rõ ràng có một chút mơ hồ về Java Home.
Ion Freeman

11

Trong Windows, bạn có thể sử dụng

C:>dir /b /s java.exe

để in đường dẫn đầy đủ của mỗi "java.exe" trên ổ C: của bạn, bất kể chúng có nằm trên biến môi trường PATH của bạn hay không.


10

Thông tin thêm về Windows ... biến java.home không phải lúc nào cũng có cùng vị trí với tệp nhị phân được chạy.

Như Denis The Menace nói, trình cài đặt đặt các tệp Java vào Tệp chương trình , nhưng cũng java.exe vào System32 . Không có gì liên quan đến Java trên đường dẫn java -version vẫn có thể hoạt động. Tuy nhiên, khi chương trình của PeterMmm được chạy, nó báo cáo giá trị của Tệp chương trìnhjava.home , điều này không sai (Java được cài đặt ở đó) nhưng thực tế nhị phân đang được chạy nằm trong System32 .

Một cách để tìm vị trí của tệp nhị phân java.exe , thêm dòng sau vào mã của PeterMmm để giữ cho chương trình chạy lâu hơn:

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

Biên dịch và chạy nó, sau đó tìm kiếm vị trí của hình ảnh java.exe . Ví dụ: trong Windows 7 mở trình quản lý tác vụ, tìm mục java.exe , nhấp chuột phải và chọn 'vị trí tệp mở', điều này sẽ mở vị trí chính xác của tệp nhị phân Java. Trong trường hợp này, nó sẽ là System32 .


9

Chạy chương trình này từ dòng lệnh:

// 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
cô ấy sẽ không phải biên dịch cái này trước chứ?
Irwin

2
Điều đó sẽ tìm thấy một JRE nếu nó được cài đặt và trên đường dẫn đầu tiên.
Jon Strayer

9

Powershell một lớp lót:

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

1
Để sử dụng JDK 11$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Diomidis Spinellis

6

Bạn đã thử nhìn vào biến% PATH% của mình chưa. Đó là những gì Windows sử dụng để tìm bất kỳ thực thi nào.


Vâng. Echo %PATH%. Của tôi dường như có trong c:\Program Files\JavaWindows 7
Mark Irvin

5

Chỉ cần thực hiện set lệnh trong dòng lệnh của bạn. Sau đó, bạn thấy tất cả các biến môi trường bạn đã đặt.

Hoặc nếu trên Unix bạn có thể đơn giản hóa nó:

$ set | grep "JAVA_HOME" 

Cảm ơn Roflcoptr, thật sự hữu ích khi tìm hiểu về 'bộ'. Trong hệ thống của tôi, nó đang hiển thị hai mục nhập cho cùng một biến, làm thế nào tôi có thể xóa mục không chính xác.
Ashine

3

Đây là hệ điều hành cụ thể. Trên Unix:

which java

sẽ hiển thị đường dẫn đến tệp thực thi. Tôi không biết tương đương với Windows, nhưng ở đó bạn thường có binthư mục cài đặt JDK trong hệ thống PATH:

echo %PATH%

Tôi cũng sẽ đưa ra câu trả lời đó, nhưng rõ ràng anh ta đang tìm kiếm một câu trả lời cho cửa sổ.
Don Branson

@DonBranson Ông đã thay đổi văn bản để bao gồm Windows sau khi bài đăng này được gửi.
EntangledLoops

2

Không có câu trả lời nào trong số này là đúng cho Linux nếu bạn đang tìm kiếm ngôi nhà bao gồm các thư mục con như: bin, docs, bao gồm, jre, lib, v.v.

Trên Ubuntu cho openjdk1.8.0, đây là: /usr/lib/jvm/java-1.8.0-openjdk-amd64

và bạn có thể thích sử dụng nó JAVA_HOMEvì bạn sẽ có thể tìm thấy các tiêu đề nếu bạn xây dựng các tệp nguồn JNI. Mặc dù nó đúng which javasẽ cung cấp đường dẫn nhị phân, nhưng nó không phải là nhà JDK thực sự.


1

Trên macOS, hãy chạy:

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

Trên máy của tôi, bản in này:

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

Lưu ý rằng việc chạy which javakhông hiển thị vị trí JDK, vì javalệnh thay vào đó là một phần của JavaVM.framework, nó bao bọc JDK thực:

$ 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

Cho cửa sổ:

@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

Liên kết này có thể giúp giải thích cách tìm java thực thi từ bash: http://srcode.org/2014/05/07/detect-java-executable/


1
Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Hồi giáo Shaiful

1
Cảm ơn @ShaifulIslam, quan điểm của bạn là đúng. Tôi đã thêm mã từ liên kết.
Qian Chen

0

Tôi đã cải thiện câu trả lời của munsingh ở trên bằng cách kiểm tra khóa đăng ký trong các đăng ký 64 bit và 32 bit, nếu cần:

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

tham chiếu để truy cập vào sổ đăng ký 64 bit


0

Kịch bản cho 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.