WindowsマシンでJDKがインストールされている場所を見つけるにはどうすればよいですか?


303

JDKがマシンのどこにあるかを知る必要があります。

cmdで実行Java -versionすると、バージョンが「1.6.xx」と表示されます。私のマシンでこのSDKの場所を見つけるために使用しようとしましたが、「JAVA_HOME」しか表示されていません(環境変数に「JAVA_PATH」変数が設定されていないため)。echo %JAVA_HOME%


1
残念ながら、最近のバージョンのJavaでは明らかに何かが変わったため、以下の回答の一部は機能しない可能性があります。今日、バージョン7.60 Java SDKをダウンロードしました。いくつか検索した後、C:\ Program Files(x86)\ Java \ jdk1.7.0_60にあります。古いバージョン6のJREがすでにインストールされていました。それはC:\ Program Files \ Javaにあり、これは新しいインストールではなく%PATH%にありました。
likejudo

1
最良の答えは、一番下のPowerShellのmajkinetorからの1行です:$ p = 'HKLM:\ SOFTWARE \ JavaSoft \ Java Development Kit'; $ v =(gp $ p).CurrentVersion; (gp $ p / $ v).JavaHome
JohnP2

もう1つ、jdkがintellij ideaにバンドルされている場合は、アイデアのインストールの近くにある可能性があります。私にとっては、ideaフォルダーから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%の形式はWindowsです
曖昧な

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ワンライナー:ls -l $(which java) | awk '{print $11}'
msanford 2016

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+)=> where javac.exe
hB0

6
ウィンドウズでは、Java
Pabitra Dash

10
where java実行ファイルがPATHにある場合にのみ機能します。何らかの理由でjavacがパスに含まれていない場合、結果は返されませんが、JDKがインストールされていないという意味ではありません。そのため、一般的なケースでは、@ groksterソリューションによって提案されたファイル検索ソリューションが結果を保証します(完了するまでに時間がかかる場合があります)。
Nikita G.

「forループ」のものは機能しませんでしたが、ここで見つかりました:C:\ Program Files(x86)\ Java \ jdk1.6.0_24 \ bin>
AjayKumarBasuthkar

この(codelabs.developers.google.com/codelabs/…)チュートリアルに従って android studioを使用している場合、実際のパスは上記のコマンドで返されるものとは異なることに注意してください。ほとんどの場合、あなたはのようなものだろう「C:\\プログラムファイル\のJava | <JDK>」どこの代わりに「JDK」のを、あなたはJDKのバージョン10のための「JDK-10.0.1」のようなものを持っているでしょう
Euler_Salter

96

Windowsのコマンドプロンプト

where javac


8
Windowsでは、Java
Pabitra Dashが

7
これは、javacがPATHにある場合にのみ機能することに注意してください。見つからない場合、このコマンドはそれが見つからないことを示しますが、JDKはまだインストールされている可能性があります。JDKのインストール後にPATHが更新されていない場合は、他の方法を使用してください。
Nikita G.

1
他の方法は何ですか?(javac.exe)do @echoでfor%iを使用することについて述べました%〜$ PATH:iですが、あなたが書いたように、PATHに設定しないと機能しません。
ニムロッド

30

Windowsのデフォルトは次のとおりですC:\Program Files\Java\jdk1.6.0_14(バージョンであるため、数値は異なる場合があります)。


どのようにして異なるバージョン番号を取得しますか?
LZH 2015

エクスプローラから段階的に場所に移動すると、インストールしたjdkフォルダのバージョンが表示されます。
ahnbizcad

26

Javaインストーラーは、%WinDir%\ System32フォルダーにいくつかのファイルを配置します(java.exe、javaws.exeなど)。コマンドラインでjava.exeと入力するか、フルパスなしでプロセスを作成すると、%PATH%フォルダーに見つからない場合、Windowsはこれらを最後の手段として実行します。

レジストリにインストールされているすべてのバージョンのJavaを検索できます。64ビットWindows上の32ビットJava用のHKLM \ SOFTWARE \ JavaSoft \ Javaランタイム環境とHKLM \ SOFTWARE \ Wow6432Node \ JavaSoft \ Javaランタイム環境をご覧ください。

これは、java自体がインストールされているさまざまなバージョンを検出する方法です。これが、32ビットバージョンと64ビットバージョンの両方が共存でき、干渉することなく正常に動作する理由です。


23

Windowsプラットフォームでは単純明快:

where java


8
その結果、Javaの場所C:\ WINDOWS \ System32 \ java.exeが正しくなくなります。ただし、実際のjdkはC:\ Java \ jdk1.7.0 \にインストールされます(JAVA_HOMEが設定されているため)
Himanshu Bhardwaj 14

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で動作するはずです。

ここに画像の説明を入力してください


私はWindows 10を使用していて、コントロールパネルにJavaがありません
Lang React Dev

1
Javaがインストールされていて、Windowsインストールパッケージを使用してインストールされていますか?
smartexpert

アカウントとシステム環境変数を調べて、javaがインストールされている可能性がある場所を見つけ、javacpl.exeを探してみてください
smartexpert

12

Windowsコマンドプロンプトで、次のように入力します。

set java_home

または、コマンド環境が気に入らない場合は、以下から確認できます。

[スタート]メニュー> [コンピューター]> [システムのプロパティ]> [システムの詳細プロパティ]。次に、[詳細設定]タブ> [環境変数]を開き、システム変数でJAVA_HOMEを探します。

ここに画像の説明を入力してください


これにより、jdkフォルダーが作成されます。Scalaワークシートで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は、実行されるバイナリと常に同じ場所であるとは限りません。

デニス・ザ・メナスが言うように、インストーラプットJavaはファイルにプログラムファイルだけでなく、のjava.exeのSystem32。パスに関連するJavaが何もない場合でも、java -versionは機能します。ただし、PeterMmmのプログラムを実行すると、Program Filesの値がjava.homeとして報告されますが、これは問題ありません(Javaがそこにインストールされています)が、実行されている実際のバイナリはSystem32にあります。

java.exeバイナリの場所を突き止める1つの方法は、次の行を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


6

%PATH%変数を確認してみましたか?これは、Windowsが実行可能ファイルを見つけるために使用するものです。


うん。Echo %PATH%. 鉱山はc:\Program Files\JavaWindows 7にいるようです
Mark Irvin

5

setコマンドラインでコマンドを実行するだけ です。次に、設定したすべての環境変数が表示されます。

または、Unixでそれを簡略化できる場合:

$ set | grep "JAVA_HOME" 

Roflcoptrに感謝します。「セット」について学ぶことは本当に役に立ちました。私のシステムでは、同じ変数の2つのエントリが表示されていますが、間違ったエントリを削除するにはどうすればよいですか。
Ashine

3

これはOS固有です。Unixの場合:

which java

実行可能ファイルへのパスが表示されます。Windowsでの同等機能は知りませんが、通常bin、システムにJDKインストールのフォルダーがありますPATH

echo %PATH%

私もその答えを出すつもりでしたが、彼は明らかに窓の答えを探しています。
Don Branson

@DonBransonこの投稿が提出された後、彼はWindowsを含むようにテキストを変更しました。
EntangledLoops 2017

2

bin、docs、include、jre、libなどのサブディレクトリが含まれているホームを探している場合、これらの回答はLinuxでは正しくありません。

Ubuntuの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

コマンドは実際のJDKをラップするの一部なwhich javaので、実行してもJDKの場所は表示されないことに注意してください。javaJavaVM.framework

$ 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からJava実行可能ファイルを見つける方法を説明するのに役立ちます:http : //srcode.org/2014/05/07/detect-java-executable/


1
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
Shaiful Islam

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.