私のマシンのどこにJDKがあるのかを知る必要があります。
cmd でJava -version
を実行すると、バージョンは '1.6.xx'と表示されます。私のマシンでこのSDKの場所を見つけるためにecho %Java_HOME%
を使ってみましたが、それは 'Java_HOME'だけを示しています(私の環境変数に 'Java_PATH'変数が設定されていないため)。
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
Windows>スタート> cmd>
C:> for %i in (javac.exe) do @echo. %~$PATH:i
JDKがインストールされている場合は、パスが表示されます。
例:C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe
Windowsでは、コマンドプロンプトで
where javac
Javaインストーラーは、いくつかのファイルを%WinDir%\ System32フォルダーに置きます(Java.exe、javaws.exeなど)。コマンドラインでJava.exeと入力するか、フルパスなしでプロセスを作成すると、%PATH%フォルダに存在しない場合、Windowsはこれらを最後の手段として実行します。
レジストリにインストールされているすべてのバージョンのJavaを検索できます。 64ビットWindows上の32ビットJava用のHKLM¥SOFTWARE¥JavaSoft¥Java Runtime EnvironmentおよびHKLM¥SOFTWARE¥Wow6432Node¥JavaSoft¥Java Runtime Environmentを参照してください。
これは、Java自体がインストールされているさまざまなバージョンを見つける方法です。これが、32ビット版と64ビット版の両方が共存でき、干渉することなく正常に機能する理由です。
Windowsでは、デフォルトはC:\Program Files\Java\jdk1.6.0_14
です(数字はバージョンによって異なるため)。
Windowsプラットフォームでは普通で単純です。
ここで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のコマンドプロンプトで、次のように入力するだけです。
set Java_home
または、コマンド環境が気に入らない場合は、次の場所から確認できます。
[スタート]メニュー> [コンピュータ]> [システムのプロパティ]> [詳細システムのプロパティ]の順にクリックします。次に、[詳細設定]タブ> [環境変数]を開き、システム変数でJava_HOMEを見つけます。
Windowsの場合... variable Java.homeは、実行されるバイナリと必ずしも同じ場所にあるとは限りません。
Denis The Menaceが言っているように、インストーラはJavaファイルをProgram Filesに入れますが、Java.exeをSystem32にも入れます。 Java -versionというパスに関連するJavaがなくても動作します。しかし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になります。
Windowsでは、あなたは使用することができます
C:>dir /b /s Java.exe
pATH環境変数にあるかどうかにかかわらず、C:ドライブ上のすべての「Java.exe」のフルパスを印刷します。
このプログラムをコマンドラインから実行します。
// File: Main.Java
public class Main {
public static void main(String[] args) {
System.out.println(System.getProperty("Java.home"));
}
}
$ javac Main.Java
$ Java Main
ワンシェルライナー:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
あなたの%PATH%変数を見てみましたか。それがWindowsが実行可能ファイルを見つけるために使用するものです。
コマンドラインでset
コマンドを実行するだけです。その後、設定したすべての環境変数が表示されます。
あるいはUnixの場合は単純化できます。
$ set | grep "Java_HOME"
これはOS固有です。 UNIXの場合
which Java
実行可能ファイルへのパスを表示します。私はWindowsに相当するものを知りませんが、そこには通常JDKインストールのbin
フォルダーがシステムPATH
にあります。
echo %PATH%
Bin、docs、include、jre、libなどのサブディレクトリが含まれている家を探しているのであれば、これらの答えはどれもLinuxには当てはまりません。
Openjdk1.8.0のUbuntuでは、これは次の場所にあります。/usr/lib/jvm/Java-1.8.0-openjdk-AMD64
jNIソースファイルをビルドするとヘッダーを見つけることができるため、Java_HOME
にそれを使用することをお勧めします。 which Java
がバイナリパスを提供するのは本当ですが、それは本当のJDKホームではありません。
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
Java
コマンドは、実際のJDKをラップするwhich 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
#!/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/
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
windowsの場合cmd:
set "Java_HOME"
必要に応じて、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%"