javapath とか JAVA_HOME が分からなかったので調べた結果をメモ。以下が当たっているのかどうかは不明なので信用しないでください。
- javapath
javapath というのは jre8 あたりから使用されている パブリック JRE のホスト先へのリンク(?)らしいです。
パブリック JRE については 「プライベートJREとパブリックJRE」 を参照してください。具体的な場所は C:\ProgramData\Oracle\Java\javapath です。ここに java.exe, javaw.exe, javaws.exe が配置されます。
したがって、PATH 環境変数に C:\ProgramData\Oracle\Java\javapath を追加しておけば、update で JRE のインストールフォルダが変更されても、それを意識することなく java.exe などを実行することができます。(PATH 環境変数への C:\ProgramData\Oracle\Java\javapath の追加は JRE のインストーラーがしてくれるようです。)ただ使用する場合は意識しなくていいですが、C:\ProgramData\Oracle\Java\javapath に java.exe などをホストする方法が前期の JRE8 と後期の JRE8 以降とで異なるようです。
前期の JRE8 は javapath フォルダに java.exe などのシンボリックリンクを配置していました。(以下は JRE8 Update 45 の例)
C:\ProgramData\Oracle\Java\javapath>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0000-0000 です C:\ProgramData\Oracle\Java\javapath のディレクトリ 2017/11/20 23:11 <DIR> . 2017/11/20 23:11 <DIR> .. 2017/11/20 23:11 <SYMLINK> java.exe [C:\Program Files\Java\jre1.8.0_45\bin\java.exe] 2017/11/20 23:11 <SYMLINK> javaw.exe [C:\Program Files\Java\jre1.8.0_45\bin\javaw.exe] 2017/11/20 23:11 <SYMLINK> javaws.exe [C:\Program Files\Java\jre1.8.0_45\bin\javaws.exe] 3 個のファイル 0 バイト 2 個のディレクトリ 10,000,000,000 バイトの空き領域
後期の JRE8 からは javapath_target_xxxxxxxxx フォルダに java.exe をコピーしたうえで、javapath_target_xxxxxxxxx へのジャンクションを張るようです。(以下は JRE9 の例)
C:\ProgramData\Oracle\Java>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0000-0000 です C:\ProgramData\Oracle\Java のディレクトリ 2018/01/17 20:08 <DIR> . 2018/01/17 20:08 <DIR> .. 2018/01/17 20:44 <DIR> .oracle_jre_usage 2018/01/17 20:04 <DIR> installcache_x64 2018/01/17 20:04 <JUNCTION> javapath [C:\ProgramData\Oracle\Java\javapath_target_162006234] 2018/01/17 20:04 <DIR> javapath_target_162006234 0 個のファイル 0 バイト 6 個のディレクトリ 10,000,000,000 バイトの空き領域 C:\ProgramData\Oracle\Java>dir javapath ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 0000-0000 です C:\ProgramData\Oracle\Java\javapath のディレクトリ 2018/01/17 20:04 <DIR> . 2018/01/17 20:04 <DIR> .. 2018/01/17 20:04 231,488 java.exe 2018/01/17 20:04 232,000 javaw.exe 2018/01/17 20:04 335,424 javaws.exe 3 個のファイル 798,912 バイト 2 個のディレクトリ 10,000,000,000 バイトの空き領域
JRE7 以前は javapath に相当するフォルダは %SystemRoot%\System32 で、そこに パブリック JRE の java.exe 等をコピーしていたようです。(未確認)
ところで javapath には java.exe とかしかないけど、そこからどうやって jvm.dll とかを探しているんですか?って話については、自身(java.exe とか) のバージョンをキーにしてレジストリを参照しているんじゃないですかね?多分。しらんけど(汗
- JAVA_HOME
JAVA_HOME とは JAVA アプリケーションがランタイムの場所を知るために使う環境変数らしいです。
転じて使用する JRE を切り替えるために使われたりするようです。例えば C:\Program Files\Java\jdk1.8.0_161 にあるランタイムを使用したい場合は、JAVA_HOME 環境変数に C:\Program Files\Java\jdk1.8.0_161 を設定します。
JAVA_HOME 環境変数が設定されていれば、アプリケーションは %JAVA_HOME%\bin\java.exe -jar myApp.jar のように実行すればいいということですね。
ただ JAVA_HOME の設定だけだとコマンドプロンプトから実行時に上記のように JAVA_HOME も記述しないとならず煩わしいので、併せて PATH 環境変数に %JAVA_HOME%\bin; を設定することが多いようです。また JAVA_HOME の設定は JRE や JDK のインストーラーが自動で設定しないので、必要であれば手動で設定する必要があります。