【Java】同一WindowsPCへの複数JDKの同居運用方法(我流)


1. 概要

Oracle社のJavaSEサポート有料化を受けて結構経つけど、とりあえずOracleJDKを入れとけって流れは随分と変わったように思う。

その反面、Oracle一強から他ベンダーのOpenJDKを使い分ける必要なんかも出て来てしまい…。
そうすると、初心者レベルが方々が割と環境をしっちゃかめっちゃにしがちなので、打開策の一つとして自分の運用方法を晒してみる事にした。
とはいえ、これは我流だからこの方法が絶対に正しいというつもりはないし、そこは鵜呑みにするんじゃなく、ちゃんと各自で判断して欲しいとは思う。

トラブルが起きて「ここを参考にやったんです!(僕は悪くありません)」
とか言われても気分が悪いので。

2. 目的

  • 同PC内に複数のJDKを同居させる
  • 開発に使うJDKを簡単に切り替える

3. やる事

3.1. 同PC内に複数のJDKを同居させる

3.1.1. JDKを入手してくる

とりあえず、JDKをダウンロードするのだが、インストーラタイプ(*.msi等)は使わない。
目的を考えたら当然だよね。この感覚が分からないようなら是非養って欲しい。

今回はAmazon Correttoの15と、Oracle JDK 8を使ってみる。
別のJDKでもいいのでそこは適宜読み替えて欲しい。

また、最後の方でOracleJDK8のmsiからJDKだけ取り出す方法についての参考ページを貼っておくが、難しそうなら一旦普通にインストールしてしまい、インストール先からフォルダを丸ごとコピーしたものでも構わない。
コピーを取ったらアンインストールしていい。

Amazon Corretto 15の例。zip版をダウンロードする

3.1.2. PC内に展開する

ここで一定のルールに基づいて配備する。
自分の場合は、常にD:\usr\Javaにzipファイル名をディレクトリにした状態で展開する。

特に難しい事はないと思う。ないよな?

3.2. 開発に使うJDKを簡単に切り替える

次にこの運用の肝だが、latestという名前でフォルダリンクを作成する。まあ、名前はなんだっていいんだけど要は環境変数JAVA_HOMEに使う名前を固定化する為にシンボリックリンクを作りたいわけだ。

3.2.1. コマンドプロンプトでリンクを作成する

フォルダ名なんかは各自の環境に置き換えてね。
mklinkコマンドを使うので、コマンドプロンプトは管理者権限で起動する必要があるかもしれん。

> cd /d d:\usr\Java
> mklink /d latest amazon-corretto-15.0.1.9.1-windows-x64-jdk\jdk15.0.1_9
latest <<===>> amazon-corretto-15.0.1.9.1-windows-x64-jdk\jdk15.0.1_9 のシンボリック リンクが作成されました

latestリンクが出来ている事を確認する

> dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は xxxx-xxxx です

 d:\usr\Java のディレクトリ

2021/02/09  22:49    <DIR>          .
2021/02/09  22:49    <DIR>          ..
2021/02/09  22:19    <DIR>          amazon-corretto-15.0.1.9.1-windows-x64-jdk
2021/02/09  22:43    <DIR>          jdk-8u281-windows-x64
2021/02/09  22:49    <SYMLINKD>     latest [amazon-corretto-15.0.1.9.1-windows-x64-jdk\jdk15.0.1_9]
               0 個のファイル                   0 バイト
               5 個のディレクトリ  776,240,762,880 バイトの空き領域

3.2.2. ユーザ環境変数にJAVA_HOMEを設定する

この操作は最初の一回だけでいい。要はシンボリックリンクlatestをWindowsにパスを通すってやつだ。
自分の場合はD:\usr\Java\latestとなる。

参考書とかはシステム環境変数にJAVA_HOMEを登録する暴挙にでることが多い印象だが、それをするとそのPCを使うすべてのアカウントに影響を及ぼす。
オススメしないどころかむしろ禁止にしたいレベルで非推奨だ。

さらに、%JAVA_HOME%\binをユーザ環境変数Pathに追加する。

これでパスが通ったはずなのでコマンドプロンプトを立ち上げなおしてバージョンチェックしてみる。

> where java
D:\usr\Java\latest\bin\java.exe

> java -version
openjdk version "15.0.1" 2020-10-20
OpenJDK Runtime Environment Corretto-15.0.1.9.1 (build 15.0.1+9)
OpenJDK 64-Bit Server VM Corretto-15.0.1.9.1 (build 15.0.1+9, mixed mode, sharing)

いいね!

3.2.3. コマンドプロンプトでJDKを切り替える

一度セットアップが終わった後は、JDK切り替える度にこの操作を行う。
これは、単純にlatestを切り替えたいJDKを向くように作り替えればいい。

試しに、OracleJDK8にしてみる。
Amazon Corretto 15に向いているlatestを削除する。ディレクトリリンクなのでrdで消せる。

> cd /d D:\usr\Java
> rd latest

そしたら、新たにOracle JDK 8に向いたlatestを作ってやる。
環境変数JAVA_HOME的にはパスは変わっていないので、コマンドプロンプトを再起動することなく中身が変わっている事が確認できるはずだ。

> mklink /d latest jdk-8u281-windows-x64
> java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

4. 参考

5. あとがき

今回は、環境をなるべく荒らさずにJDKを使い分けようぜという趣旨の記事でした。
需要あるんですかねw

ところでこれはグチだったりするんだけど、何と申しましょうか…
WinでもMacでもいいんだけど、どれか1つでもまともに使えるPCがない状態でよくITに来たなーって人が割と多い印象なんだけど時代なんですかね。
んで、こんな事をいう自身が老害になったんだろうかと戦々恐々してたりしなかったりしています。

では、以上です!