OracleのJDKに対するライセンスが変わってから、複数からJDKが配布され利用するようになりました。ここで改めてJDKのバージョン切替方法を整理します。

目次
JDKの現状
プログラミング言語にJavaを使って開発をするとき、必要になるのがJDKです。
Javaはインタープリタを介した言語ですが、コンパイルを必要とします。
JDKには実行環境とコンパイル環境が含まれています。
これまでに複数バージョンがリリースされています。
これから最新のバージョンと古いバージョンのJDKを両方インストールして、JDKのバージョンを切り替えながら利用したい場合はいくつか考慮すべき点があります。
現在はOracleが提供しているJDK(通称OracleJDK)はサポートが有償です。
それに伴って、GPLライセンスで配布されているOpenJDKが存在しています。
OracleJDKも個人的な利用については無償なので、学習目的の場合はこれまでのようにOracleからJDKをダウンロード&インストールして利用できます。
ですが、Oracleから最新のJDK以外をダウンロードするにはOracleプロファイル(アカウント)を作成する必要があります。
Oracleプロファイル作成のときには様々な情報の入力が必要です。
住所・氏名・会社名・勤務先電話番号など会社での利用を想定しているので個人では避けたい人も多いと思います。
このような状況になると多くの人はOpenJDKを利用することになるのかと思います。
OracleJDKとOpenJDKには大きな差異はないとされています。
この記事ではそれぞれのプラットフォームでJDKのインストールと異なったバージョンのJDKをインストールした際の切替方法を整理します。
JDKのインストール
OracleJDK
まずはOracleJDKについて、これまでと同じようにOracleサイトからダウンロードしてインストールします。

ダウンロードのページには各バージョンのJDKがダウンロードできます。
Linux、macOS、Windows用にそれぞれパッケージやインストーラーのファイルをダウンロードできます。
ですが、最新バージョン以外のダウンロードはオラクルのアカウントでログインする必要があります。

OpenJDK
OpenJDKは2006年にサン・マイクロシステムズがJavaをオープンソース化する意志があることを発表してできたコミュニティです。
Java仮想マシン、コンパイラとGPLライセンス化できないライブラリを除いてオープンソース化されています。
なので中身はOracleJDKとほぼ同じです。
OpenJDKは以下のサイトからダウンロードしてインストールします。

ページには最新版のリンクが表示されています。
この時点(2019/11)ではJDK13がGAとなっています。
Linux、macOS、Windowsとそれぞれのビルドが用意されていますが、インストーラー形式ではないので、個々に展開して環境を作成します。
過去のJDKバージョンは以下からダウンロードできます。
ただ、JDK8以前のものは掲載していません。
AdoptOpenJDK
AdoptOpenJDKはOpenJDKを安定して信頼できる形で配布する目的で立ち上げられたコミュニティです。
Amazon、IBM、Microsoftなどが参加しています。
AdoptOpenJDKの特徴的なところは、インストールするパッケージに含まれるJava仮想マシン(JVM)の種類を選べるところです。
OpenJDKから提供されているHotSpotか、Eclipseから提供されているOpenJ9のどちらかを選択することができます。

サイトにアクセスすると自動的にプラットフォームを識別して最新版をダウンロードできるようになっています。
Other platformsページに行くと、Linux、macOS、WindowsのJDKがダウンロードできます。
それぞれのプラットフォームごとにインストーラー形式のファイルもダウンロードすることができます。
バージョンはJDK8から提供されています。
おすすめのJDKインストール
各プラットフォームごとのおすすめインストール方法は以下です。
MacのおすすめJDKインストール方法
JDKの最新版であればOracleからアカウントなしにダウンロードしてパッケージを使ってインストールできるのですが、最新版以外はそれができません。
最新版だけOracleJDKでそれ以外はOpenJDKでもいいですが、統一したJDKで整理したい場合はAdoptOpenJDKを使うのが簡単です。
AdoptOpenJDKはインストールパッケージを提供しているので、指示に従ってインストールするだけです。






AdoptOpenJDKはOracleJDKと同じく「/Library/Java/JavaVirtualMachines」配下にインストールされます。
例)/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk
なのでJavaコマンドの管理もOracleJDKと同じです。
WindowsのおすすめJDKインストール方法
Macと同じく最新版はOracleでもいいですが、統一したJDKで整理したい場合はAdoptOpenJDKを使うのが簡単です。






Windows用のインストールパッケージはインストールすると自動的にPATH環境変数の設定(pathの追加)も行います。
例)PATH環境変数にインストールしたJDKのパスが追加される「C:\Program Files\AdoptOpenJDK\jdk-13.0.1.9-hotspot\bin」
JAVA_HOME環境変数は設定しなくとも使えますが、設定する場合は手動で追加します。
LinuxのおすすめJDKインストール方法
他のOSと同じく最新版はOracleでもいいですが、統一したJDKで整理したい場合はOpenJDKをインストールするのが簡単です。
LinuxはRPM(CentOS,Fedoraなど)とDEB(Debian,Ubuntuなど)のどちらのインストーラーパッケージでもOpenJDKをインストールすることができます。
例1)UbuntuでOpenJDKをインストールする場合
$ sudo apt install openjdk-13-jdk
これでJDK13がインストールされます。
JDK8をインストールしたい場合は、
$ sudo apt install openjdk-8-jdk
でインストールできます。
$ java -version
でJavaバージョンを確認します。
openjdk version "13" 2019-09-17
OpenJDK Runtime Environment (build 13+33-Ubuntu-1)
OpenJDK 64-bit Server VM (build 13+33-Ubuntu-1, mixed mode)
AdoptOpenJDKも同じようにインストールできます。
ですが、パッケージインストールのコマンドを実行する前にGPG Keyとリポジトリのインポートをする必要があります。
なのでOpenJDKのインストールのほうがより簡単です。
例2)SentOSでOpenJDKをインストールする場合
$ sudo yum install java-13-openjdk-devel
これでJDK13がインストールされます。
JDK8をインストールしたい場合は、
$ sudo yum install java-1.8.0-openjdk-devel
でインストールできます。
JDKのバージョン切り替え方法
状況によって複数バージョンのJDKをインストールしたいこともあると思います。
そのときに、各OSごとに利用するJDKのバージョンを切り替える方法を説明します。
ここではそれぞれのOSでおすすめのインストールを行った場合の方法をベースに説明します。
WindowsやMacの場合、異なった種類のJDKをインストールしても同じ方法で切り替えることができると思いますが、Linuxについてはその限りではありません。
WindowsのJDKバージョン切り替え方法
おすすめ方法でAdoptOpenJDKをWindowsにインストールしました。
AdoptOpenJDKはインストール終了時に自動的にPATH環境変数にインストールしたJDKのパスを追加してくれます。
他のJDKについてもJavaコマンド類を使用するためにPATH環境変数を編集すると思います。
そして、WindowsはJavaコマンド実行時にこのPATH環境変数に設定しているパスを先頭から順に確認し、コマンドのありかを解決します。
なので先にPATH環境変数が解決できたバージョンが実行されることになります。
つまりPATH環境変数に設定しているパスの順番を入れ替えることで、Javaコマンド類のバージョンを切り替えることができます。



システムのプロパティから環境変数の編集画面を表示して、JDKのパス設定順番を入れ替えて利用したバージョンを切り替えます。
画面上から順番にPATH環境変数は解決されるので、利用したいJDKバージョンは他のものより上にくるよう順番を入れ替えます。
上記の画像ではAdoptOpenJDKをインストールしたときの例を表示していますが、他の種類のJDKの場合でもパスの順番を入れ替えることで利用したいJDKバージョンを指定できます。
MacのJDKバージョン切り替え方法
Macでは「/usr/libexec/java_home」というコマンドを使ってJDKバージョンを切り替えることができます。
このコマンドはXcode Command Line Toolsをインストールすることで利用することができます。
Xcode Command Line ToolsがMacにない場合はインストールしてください。
XcodeをApp Storeからインストールすると自動的にインストールされますが、インストールされていないようであれば以下のコマンドを実行してください。
$ xcode-select --install
MacではJDKが以下のフォルダにインストールされます。
/Library/Java/JavaVirtualMachines/
例えば、AdoptOpenJDKの13をインストールすると以下のフォルダにインストールされます。
/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk
そして以下のコマンドを実行すると現在実行されるJavaコマンドのパスを表示します。
$ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/adoptopenjdk-13.jdk/Contents/Home
また「-v」オプションを使うことで指定バージョンのパスを表示できます。
$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
そしてこのコマンドを使ってJAVA_HOME環境変数を設定することで利用するバージョンを切り替えます。
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.232-b09, mixed mode)
「export JAVA_HOME=‘/usr/libexec/java_home -v 13‘」を.bash_profileに記述しておくとログイン時にそのバージョンが指定されます。
LinuxのJDKバージョン切り替え方法
Linuxではコマンドを実行してJDKバージョンを切り替えます。
Debian、Ubuntuなどは以下を実行します。
$ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には2個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
0 /usr/lib/jvm/java-13-openjdk-amd64/bin/java 1311 自動モード
1 /usr/lib/jvm/java-13-openjdk-amd64/bin/java 1311 手動モード
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手動モード
現在の選択 [*] を保持するには 、さもなければ選択肢の番号のキーを押してください: 0
ここで、切り替えるバージョンの選択肢を指定します。
Fedora、CentOSなどは以下を実行します。
$ sudo alternatives --config java
このコマンドでもUbuntuなどと同じように選択肢を入力してバージョンを切り替えます。
最後に
元々Javaはサン・マイクロシステムズが無償で公開している技術ですが、時間の経過とともに配布元が増えることで利用の選択肢が増えています。
Javaの中身はほぼ同等ということですが、同じものなのであればもっとシンプルにわかりやすくして欲しいですよね。