その時に書きたいものを書きます

その時に書きたいものを書くんです

JAVA_HOMEって誰が使うの

環境変数JAVA_HOME。

だいぶ前に環境変数に追加して、なんのために追加したかももはや覚えてなかったので改めて調べてみた。

Tomcatのもの

こいつを参照している代表格がTomcatである。Tomcatのbin配下のsetclasspath.batに以下のような記述があるよ。

rem ---------------------------------------------------------------------------
rem Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
rem are valid and consistent with the selected start-up options and set up the
rem endorsed directory.
rem ---------------------------------------------------------------------------

rem Make sure prerequisite environment variables are set

rem In debug mode we need a real JDK (JAVA_HOME)
if ""%1"" == ""debug"" goto needJavaHome

rem Otherwise either JRE or JDK are fine
if not "%JRE_HOME%" == "" goto gotJreHome
if not "%JAVA_HOME%" == "" goto gotJavaHome
echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
echo At least one of these environment variable is needed to run this program
goto exit

:needJavaHome
rem Check if we have a usable JDK
if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome
if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome
set "JRE_HOME=%JAVA_HOME%"
goto okJava

:noJavaHome
echo The JAVA_HOME environment variable is not defined correctly.
echo It is needed to run this program in debug mode.
echo NB: JAVA_HOME should point to a JDK not a JRE.
goto exit

:gotJavaHome
rem No JRE given, use JAVA_HOME as JRE_HOME
set "JRE_HOME=%JAVA_HOME%"

:gotJreHome
rem Check if we have a usable JRE
if not exist "%JRE_HOME%\bin\java.exe" goto noJreHome
if not exist "%JRE_HOME%\bin\javaw.exe" goto noJreHome
goto okJava

:noJreHome
rem Needed at least a JRE
echo The JRE_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto exit

:okJava
rem Don't override the endorsed dir if the user has set it previously
if not "%JAVA_ENDORSED_DIRS%" == "" goto gotEndorseddir
rem Set the default -Djava.endorsed.dirs argument
set "JAVA_ENDORSED_DIRS=%CATALINA_HOME%\endorsed"
:gotEndorseddir

rem Set standard command for invoking Java.
rem Note that NT requires a window name argument when using start.
rem Also note the quoting as JAVA_HOME may contain spaces.
set _RUNJAVA="%JRE_HOME%\bin\java"
set _RUNJDB="%JAVA_HOME%\bin\jdb"

goto end

:exit
exit /b 1

:end
exit /b 0

このようにTomcatはベタでJAVA_HOMEを参照することにしている模様。TomcatのためにJAVA_HOMEをちゃんと設定してあげよう。

Tomcatのためだけじゃない

Tomcatに合わせて定義したJAVA_HOMEであるが、Tomcatのためだけに使われているわけではない。例えばわたしの環境では、以下のように環境変数Pathに溶け込んでいた。い、いつの間に!

f:id:yyyske:20140909165948p:plain

これはRapid Environment Editorという神ツール環境変数見た画面である。

こうしておくと、Tomcatが見るJDKと、PC上デフォルトで使用するJDKのバージョンを合わせることができる。逆に言うと合ってしまう。要注意な。

Tomcat以外にもJAVA_HOMEを見ている何かしらがあるそうなので、JAVA_HOMEを見てそうなやつがいたら注意深く観察する必要がある。場合もある。例えばAndroidSDKのインストーラJAVA_HOMEを見ているようです。

参考:Android SDK のインストールエラー JAVAが見つからないエラー対処法はJAVA_HOMEの設定: 一番わかりやすいAndroidアプリ開発入門