JDKがマシンのどこにあるかを知る必要があります。
cmdで実行Java -version
すると、バージョンが「1.6.xx」と表示されます。私のマシンでこのSDKの場所を見つけるために使用しようとしましたが、「JAVA_HOME」しか表示されていません(環境変数に「JAVA_PATH」変数が設定されていないため)。echo %JAVA_HOME%
JDKがマシンのどこにあるかを知る必要があります。
cmdで実行Java -version
すると、バージョンが「1.6.xx」と表示されます。私のマシンでこのSDKの場所を見つけるために使用しようとしましたが、「JAVA_HOME」しか表示されていません(環境変数に「JAVA_PATH」変数が設定されていないため)。echo %JAVA_HOME%
回答:
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
where java
Windows(少なくともWindows 7以降)で動作しますが、JREではなくJDKが本当に必要な場合は、返されたディレクトリで 'bin / javac /
ls -l $(which java) | awk '{print $11}'
Windows>スタート> cmd>
C:> for %i in (javac.exe) do @echo. %~$PATH:i
JDKがインストールされている場合は、パスが表示されます。
次に例を示します。C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe
where java
実行ファイルがPATHにある場合にのみ機能します。何らかの理由でjavacがパスに含まれていない場合、結果は返されませんが、JDKがインストールされていないという意味ではありません。そのため、一般的なケースでは、@ groksterソリューションによって提案されたファイル検索ソリューションが結果を保証します(完了するまでに時間がかかる場合があります)。
Windowsのコマンドプロンプト
where javac
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ビットバージョンの両方が共存でき、干渉することなく正常に動作する理由です。
Windowsプラットフォームでは単純明快:
where java
以下のバッチスクリプトは、既存のデフォルトJREを出力します。Java Runtime EnvironmentをJava 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
Windows 10では、[コントロールパネル]> [Java]に移動してパスを確認できます。表示されるパネルで、下のスクリーンショットに示すようにパスを見つけることができます。Javaコントロールパネルで[Java]タブに移動し、[JavaランタイムのバージョンとJavaアプリケーションとアプレットの設定を表示および管理する]の下の[表示]ボタンをクリックします。
これは、Windows 7およびおそらく他の最新バージョンのWindowsで動作するはずです。
Windowsコマンドプロンプトで、次のように入力します。
set java_home
または、コマンド環境が気に入らない場合は、以下から確認できます。
[スタート]メニュー> [コンピューター]> [システムのプロパティ]> [システムの詳細プロパティ]。次に、[詳細設定]タブ> [環境変数]を開き、システム変数でJAVA_HOMEを探します。
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です。
このプログラムをコマンドラインから実行します。
// File: Main.java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("java.home"));
}
}
$ javac Main.java
$ java Main
Powershellワンライナー:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
$p='HKLM:\SOFTWARE\JavaSoft\JDK'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
%PATH%変数を確認してみましたか?これは、Windowsが実行可能ファイルを見つけるために使用するものです。
Echo %PATH%.
鉱山はc:\Program Files\Java
Windows 7にいるようです
set
コマンドラインでコマンドを実行するだけ です。次に、設定したすべての環境変数が表示されます。
または、Unixでそれを簡略化できる場合:
$ set | grep "JAVA_HOME"
これはOS固有です。Unixの場合:
which java
実行可能ファイルへのパスが表示されます。Windowsでの同等機能は知りませんが、通常bin
、システムにJDKインストールのフォルダーがありますPATH
。
echo %PATH%
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の場所は表示されないことに注意してください。java
JavaVM.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
#!/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/
必要に応じて、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%"
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