【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](https://aws.amazon.com/jp/corretto/)の15と、[Oracle JDK 8](https://www.oracle.com/jp/java/technologies/javase/javase-jdk8-downloads.html)を使ってみる。
別のJDKでもいいのでそこは適宜読み替えて欲しい。

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

### Amazon Corretto 15の例。zip版をダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/c18395ac-1172-1a72-7265-1cc34b7d0b8f.png)

### 3.1.2. PC内に展開する
ここで一定のルールに基づいて配備する。
自分の場合は、**常に`D:\usr\Java`にzipファイル名をディレクトリにした状態で展開**する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/737c2893-a3c3-d9a1-72ed-f228863130c7.png)

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

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

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

```console
> 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リンクが出来ている事を確認する

```console
> 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を使うすべてのアカウントに影響を及ぼす。
オススメしないどころかむしろ**禁止にしたいレベルで非推奨**だ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/0d54ee49-cbb6-3179-7c78-a82b5a0a05dd.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/c74269e1-2e0d-5960-26c4-69b36ecad133.png)

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

```console
> 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`で消せる。

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

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

```console
> 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. 参考
- it-swarm.jp.net
    - [EXEやMSIのインストーラではなく、最新のJRE/JDKをZipファイルとして入手する方法を教えてください。](https://www.it-swarm.jp.net/ja/java/exe%E3%82%84msi%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%A9%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E6%9C%80%E6%96%B0%E3%81%AEjrejdk%E3%82%92zip%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E5%85%A5%E6%89%8B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82/968891998/)

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

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

では、以上です！