開発者の宿命というか、JavaのJDKを複数自分のPCにインストールしています。
メインの開発はJDK1.7で行い、最新のプロダクトを試してみるためには、JDK1.8を使用するといった具合に。
私のWindowsには1.6,1.7,1.8のバージョンがインストールされているのですが、自分の思ったようにJDKのバージョンを切り替えて使うことができなくなっていました。
その解決策を模索した時のログです。
そもそも私の知っているJavaのバージョン切り替えの仕組みは、環境変数「JAVA_HOME」にJDKへのパスをセットし、さらに「PATH」に「%JAVA_HOME%\bin」といったjava.exeのある
ディレクトリへのパスを設定することで行うといったものでした。
ただ、今回、それを行ってもうまく切り替わってくれません。。。
なんでJDKが切り替わらないのか
Oracleの、Javaへのパスを通す仕組みは、JDK8とそれ以前で変わっています。
JDK8以前は、Javaのインストール時に「C:\Windows\System32」配下にインストールしたバージョンの「java.exe」「javaw.exe」「javaws.exe」がコピーされていました。
それが、JDK8になってから「C:\ProgramData\Oracle\Java\javapath」配下に「java.exe」「javaw.exe」「javaws.exe」のシンボリック・リンクが作成され、インストールしたJDKへのショートカットとなっています。
複数のJDKをインストールすると、これらの複数のパスが混在し、どれが最初に効いてくるかでシステムのJDKのバージョンが決まるため、従来の方法でPATHを変更しても、
それが効かないといった状態になってるようです。
解決方法
それらを解決するには、いわばインストーラによって「勝手に」変更される環境をきれいにして、自分の設定が反映されるようにすればいいわけです。
インストーラによってコピーされるこれらのファイルを消します。削除が不安という方はリネームでもいいと思います。
私は__java.exeのようにリネームしました。
インストールしたJDKのバージョンによっては「C:\Windows\SysWOW64」配下にもおなじファイルがある場合がありますので、同じ対応をします。
JDK8以降のJDKをインストールしている場合は、「C:\ProgramData\Oracle\Java\javapath」が追加されていますので、それを一番下に持ってきて、最後に読み込むようにします。
上記2つの対応を行えば、従来のように、「JAVA_HOME」にJDKへのパスをセットし、さらに「PATH」の最初の方に「%JAVA_HOME%\bin」を追加すればJDKの切り替えが思ったようにできると思います。