[java] Windows における javapath と JAVA_HOME

2018年2月9日

 javapath とか JAVA_HOME が分からなかったので調べた結果をメモ。以下が当たっているのかどうかは不明なので信用しないでください。

  1. 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 とか) のバージョンをキーにしてレジストリを参照しているんじゃないですかね?多分。しらんけど(汗

  2. 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 のインストーラーが自動で設定しないので、必要であれば手動で設定する必要があります。






カテゴリー: Java, OS, Program, Windows, 環境設定, 開発環境

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org