torutkのブログ

ソフトウェア・エンジニアのブログ

複数JDKバージョンのインストール(Windows OS編)

Javaでプログラミングをしていると、複数のJDKバージョンを扱うことが必要になることがあります。そこで、アップデートの度に古いバージョンをアンインストールせずに新しいバージョンを入れていくとこんな感じになります。

インストール先のディレクトリは次のようになります。

C:\Program Files\Java>dir jdk*

2013/05/25  22:32    <DIR>          jdk1.6.0_45
2015/04/15  23:28    <DIR>          jdk1.7.0_65
2014/10/15  23:30    <DIR>          jdk1.7.0_72
2015/01/25  12:02    <DIR>          jdk1.7.0_76
2015/04/21  08:31    <DIR>          jdk1.7.0_80
2014/07/28  23:04    <DIR>          jdk1.8.0_11
2015/01/25  13:47    <DIR>          jdk1.8.0_31
2015/03/05  01:07    <DIR>          jdk1.8.0_40
2015/04/21  08:47    <DIR>          jdk1.8.0_45
2015/08/01  18:49    <DIR>          jdk1.8.0_51

Windows OSの場合、環境変数JAVA_HOMEにJDKをインストールしたディレクトリを設定し、さらに環境変数PATHにJDKインストールディレクトリ下のbinを設定します。しかし、NetBeans IDEなどはJAVA_HOMEやPATHにあるJavaではなく、独自の設定ファイル(netbeans.conf)に書かれたパスのJavaを使用します。なので、使用するJavaのバージョンを切り替えるのが結構手間になります。

UNIX系OSでは、このようなときはシンボリックリンクを使って切り替えます。Windows OSでもNTFSではシンボリックリンクを実現する機能*1が備わっており、Windows Vistaから標準でmklinkコマンドが提供されるようになったので、シンボリックリンク(ジャンクション)で切り替えを行うことができます。

管理者権限でコマンドプロンプトを起動します。

C:\>cd "Program Files\Java"
C:\Program Files\Java>mklink /D jdk1.8.0 jdk1.8.0_51
jdk1.8.0 <<===>> jdk1.8.0_51 のシンボリック リンクが作成されました

C:\Program Files\Java>dir jdk*
  :
2015/08/01  22:33    <SYMLINKD>     jdk1.8.0 [jdk1.8.0_51]
2014/07/28  23:04    <DIR>          jdk1.8.0_11
2015/01/25  13:47    <DIR>          jdk1.8.0_31
2015/03/05  01:07    <DIR>          jdk1.8.0_40
2015/04/21  08:47    <DIR>          jdk1.8.0_45
2015/08/01  18:49    <DIR>          jdk1.8.0_51

環境変数JAVA_HOMEや環境変数PATHの設定、各種ツールのJava SEへのパス設定は、ここで作成したシンボリックリンク C:\Program Files\Java\jdk1.8.0 を使用します。
これであれば、シンボリックリンクを変更するだけで使用するJava SEバージョンが変更できます。

また、パスに空白が含まれることで正しく動作できないツールがあった場合にも、例えばC:\java をC:\Program Files\Javaシンボリックリンクとして作成しておくことで、対応することが可能になります。

C:\>mklink /d java "Program Files\Java"
java <<===>> Program Files\Java のシンボリック リンクが作成されました

C:\>dir
  :
2015/08/01  22:34    <SYMLINKD>     java[Program Files\Java]

例えば、JAVA_HOME、PATHには次を設定します。

JAVA_HOME=C:\java\jdk1.8.0
PATH=C:\java\jdk1.8.0\bin;%PATH%

あとはシンボリックリンクの変更で使用するJavaのバージョンを変更します。

C:\Program Files\Java>rmdir jdk1.8.0

C:\Program Files\Java>mklink /d jdk1.8.0 jdk1.8.0_60

*1:リパース・ポイント