【Java】JDKのバージョンを切り替える方法

# 目次
[1.はじめに](#はじめに)
[2.概要](#概要)
[3.内容](#内容)
[4.おわりに](#おわりに)
[5.参考](#参考)


# はじめに
:::note warn
こちらは、個人の学習記事になります。以下の点をご承知おき下さい。
- 学習中の内容になります。必要に応じて都度加筆・修正致します。
- 出来る限り正しく記載するよう努力致しますが、間違い、ミスも御座います。コメントにてご指摘、アドバイス頂けたら幸いです。
- <b>二次情報としての使用は推奨致しません。</b>ご了承ください。
:::

# 概要

静的解析ツール「checkstyle」を導入しようとしたら、gradleとJDKのバージョンが異なり、使えなかった。今回は、javaのバージョンを合わせることにより使えるよう環境設定をすることにした。


# 内容

スクールの講師の方に質問したところ次のアドバイスを頂いた。
解消方法は以下の通り。
<b>1. gradleをJava19でも動くように合わせる</b>  
※他に、springbootを使い始める時に、Java19でも動くようにすると言う方法がある。
<b>2. Java19→17に切り替える</b>

つまりはJava19のままにするか、Java17に戻すか、の二択。
二択とは言ったものの、JDKでも17と19では明確に違う点があります。
それは<b>LTS(長期サポート版)なのか否か</b>です。現在、長期サポート版は11と17だそうです。
[オラクル社のJava17の記事](https://www.oracle.com/jp/news/announcement/java17-jp-2021-09-17/)
初めに、環境構築の際にインストールしたのが17と19だったと記憶しておりました。と言うことで、順番に確認していくことにしました。


### 実行したこと


#### 前提(環境)
- MacBook Pro(2021M1Pro)


1. javaのバージョン確認
2. ターミナルのシェルをbash→zshに切り替える
3. Java17のPATHを確認　　
4. zshrcファイルを作成
5.  PATHを通す
6.  17になったことを確認

ほぼターミナルの内容となりますのでご了承ください。

<b>1. javaのバージョン確認</b>
ターミナルを開き次のコマンドを入力
```terminal
java -version
```
次のように表示されます
```terminal
java version "19.0.1" 2022-11-20
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
```
バージョンの後に19.0.1って書いてますね。現在使われているバージョンが19であることがわかります。


では、自分のPCに入っている(インストールされている)JDKのバージョンの種類を確認しましょう。
以下のコマンドで確認できます。
```terminal
/usr/libexec/java_home -V
```
結果
```
gotopoyo@MacPro ~ % /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    19.0.1 (x86_64) "Oracle Corporation" - "Java SE 19.0.1" /Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home
    17.0.5 (x86_64) "Oracle Corporation" - "Java SE 17.0.5" /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-19.jdk/Contents/Home
```
2つのJDKのバージョンがあることがわかります。17が入っているので、今回は切り替える作業のみで大丈夫そうです。
もし、希望のバージョンが入っていなかったら、JDKをインストールしてください。（[※参考記事](https://amateur-engineer.com/mac-jdk-install/)）


<b>2. ターミナルのシェルをbash→zshに切り替える</b>
切り替わっていない方は切り替えてください。問題なさそうであれば飛ばしてください。切り替え方は以下の記事を参考にしてください。
[【ターミナル】シェルって何？(zsh,bash,cshなど)]()←作成中

<b>3. Java17のPATHを確認　　</b>
次のコマンドを入力してください。JAVA_HOMEのPATHを確認します。
```terminal
/usr/libexec/java_home -v "バージョン番号"
```
実際はこうなる
```
gotopoyo@MacPro ~ % /usr/libexec/java_home -v "17"            
/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home
```
今回は17に切り替えたいので17のパスを確認しています。
パスを通すって何？という方に簡単に説明すると、そのファイルをファイル名を指定するだけで実行できるようにする設定です。パスは、そのファイルまでの通り道と言えます。今回は具体的な説明を省きますので、詳しく知りたい方は以下の参考リンクを確認するといいかもしれません。
([※参考記事](https://daeudaeu.com/mac-path/#:~:text=%E3%80%8C%20PATH%20%E3%82%92%E9%80%9A%E3%81%99%E3%80%8D%E3%81%A8%E3%81%AF,%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82))


<b>4. zshrcファイルを作成</b>
3.のパスを通す為には、zshrcファイルが必要になります。なので、パスを通す作業の前に作っておきます。
以下の記事を参考にしてください。
[zshrcファイルを作成する方法]()←作成中

<b>5.PATHを通す</b>
4.に合わせて、先ほど3.で示したパスを通します。
以下の記事を参考にしてください。
[PATHを通す方法]()←作成中

<b>6.  17になったことを確認</b>
初めに使った`java -version`で確認してください。

```terminal
java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment (build 17.0.5+9-LTS-191)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.5+9-LTS-191, mixed mode, sharing)
```
ちゃんと17に切り替わっています。これで問題なく使えます。

ただ注意して欲しいのは、今回の設定はあくまで<b>ローカル(自分のPCの中身)だけの設定</b>なので、例えば設定前のバージョンで作ったコードとかが動かなかったり、IntelliJやeclipseなどのIDE（統合開発環境）の設定は変わっていなかったりします。場合によってはそれらを確認した方が良いかもしれません。


# おわりに

　初学者の方が「よし、これからコード頑張って書くぞ！！設定なんてさっさと終わらせるぞ！！」と意気込んだのは良いものの、こういったバージョン切り替え等の最初の設定で躓くことは良くある事なんだそうです。少なくとも私を含め周囲の方は設定で引っかかって「助けて〜涙」のように苦しんでいました。私は時間かかり過ぎた感は否めませんが…。
　環境設定は、現役エンジニアでも引っ掛かってしんどい事も多々あるそうなので、初学者の方は最初の設定で進まない事で自分を責めたりしないでください。それは良い勉強だと思います。この業種は、ミスが多ければ多いほど次の糧になりますので、前向きにいきましょう。私も一緒に頑張りますので。

# 参考

https://www.oracle.com/jp/news/announcement/java17-jp-2021-09-17/

https://endoflife.date/java

https://www.publickey1.jp/blog/22/java_19risc-v1java_21lts.html#:~:text=Java%E3%81%AF6%E3%82%AB%E6%9C%88%E3%81%94%E3%81%A8,%E3%81%95%E3%82%8C%E3%81%9FJava%2017%E3%81%A7%E3%81%99%E3%80%

https://amateur-engineer.com/mac-java-version/