Java開発環境(JDK)の各OSにおけるベストプラクティス

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サイトからダウンロードしてインストールします。

・OracleJDKダウンロード

Linux、macOS、Windows用にそれぞれパッケージやインストーラーのファイルをダウンロードできます。

ですが、JDK8(LTS), JDK11(LTS)のダウンロードはオラクルのアカウントでログインする必要があります。

OpenJDK

OpenJDKは2006年にサン・マイクロシステムズがJavaをオープンソース化する意志があることを発表してできたコミュニティです。

・OpenJDKサイト

Java仮想マシン、コンパイラとGPLライセンス化できないライブラリを除いてオープンソース化されています。

なので中身はOracleJDKとほぼ同じです。

OpenJDKは以下のサイトからダウンロードしてインストールします。

・OpenJDKダウンロード

ページには最新版のリンクが表示されています。

Linux、macOS、Windowsとそれぞれのビルドが用意されていますが、インストーラー形式ではないので、個々に展開して環境を作成します。

過去のJDKバージョンは以下からダウンロードできます。

・JDKアーカイブ

ただ、JDK8以前のものは掲載していません。

AdoptOpenJDK

AdoptOpenJDKはOpenJDKを安定して信頼できる形で配布する目的で立ち上げられたコミュニティです。

Amazon、IBM、Microsoftなどが参加しています。

AdoptOpenJDKの特徴的なところは、インストールするパッケージに含まれるJava仮想マシン(JVM)の種類を選べるところです。

OpenJDKから提供されているHotSpotか、Eclipseから提供されているOpenJ9のどちらかを選択することができます。

・AdoptOpenJDKサイト

サイトにアクセスすると自動的にプラットフォームを識別して最新版をダウンロードできるようになっています。

Other platformsページに行くと、Linux、macOS、WindowsのJDKがダウンロードできます。

・AdoptOpenJDKリリース

それぞれのプラットフォームごとにインストーラー形式のファイルもダウンロードすることができます。

バージョンはJDK8から提供されています。

おすすめのJDKインストール

Mac・Linux・Windowsそれぞれのおすすめインストール方法です。

MacとLinuxのおすすめJDKインストール方法

複数のJDKをインストールすることを前提としています。

イントール・アンイストールをよりしやすくするためにパッケージ管理ツールを使います。

MacおよびLinuxともにHomebrewでパッケージ管理を行います。

Homebrewを使うことでどちらのOSでも同じ管理と操作で作業できるようになります。

Homebrewのインストールは以下のサイトからシェルスクリプトをコピーしてターミナルで実行して行います。

https://brew.sh/index_ja

HomebrewでJDKをインストールしますが、ここではAdoptOpenJDKをインストールします。

HomebrewによるJDKのインストール方法は以下のサイトに掲載されています。

https://github.com/AdoptOpenJDK/homebrew-openjdk

ここではこの内容を簡単に説明します。

HomebrewはAdoptOpenJDKのパッケージも管理できます。

最新のJDKをインストールするだけなら以下のコマンドでインストールできます。

$ brew install --cask adoptopenjdk

その時点の最新のJDKがインストールされます。

バージョン指定してインストールし、複数のバージョンを切り替えて使いたい場合は以下のようにします。

$ brew tap AdoptOpenJDK/openjdk
$ brew install --cask <version>

まずはtapコマンドにより公式リポジトリ以外のリポジトリからもパッケージのインストールを可能にします。

これはAdoptOpenJDKのopenjdkリポジトリからのインストールを有効にしています。

そのあと指定したバージョンのJDKをインストールします。

以下はJDK14をインストールした例です。

$ brew tap AdoptOpenJDK/openjdk
$ brew install --cask adoptopenjdk14

どんな種類のパッケージがどの名前であるのかは以下のコマンドか

$ brew search adoptopenjdk

もしくは

https://github.com/AdoptOpenJDK/homebrew-openjdk#available-versions」のリンクから確認することができます。

MacとLinuxのJDKバージョン切り替え

複数のバージョンをインストールしたときは以下の記述を.bashrcもしくは.zshrcに記述して、シェルスクリプトを実行しバージョンの切り替えを可能にします。

jdk() {
    version=$1
    export JAVA_HOME=$(/usr/libexec/java_home -v "$version");
    java -version
}

記述した直後は以下のコマンドでこの記述を有効にします。

$ source ~/.bashrc
or
$ source ~/.zshrc

バージョンを切り替えるには以下のようにコマンドを入力します。

$ jdk 14
$ jdk 11

Java(JDK)はJAVA_HOME環境変数によって実行するJavaを見ています。

そのパスをjava_homeコマンドで切り替えることができるようになっているんですね。

ちなみに、Macでは「/Library/Java/JavaVirtualMachines」配下にJDKがインストールされます。

ここにある各JDKのパスをJAVA_HOME環境変数に設定することで実行環境を切り替えます。

AdoptOpenJDKはインストールパッケージを提供しているので、指示に従ってインストールするだけです。

WindowsのおすすめJDKインストール方法

ここではWindowsに直接インストールする方法を説明しますが、WSL2の環境がある場合はMac・Linuxと同様にHomebrewを使ってJDKをインストールすることができます。

Windowsに直接インストールするときもAdoptOpenJDKを使うのがシンプルです。

「Set JAVA_HOME variable」のアイコンをクリックして、メニューから「ローカルハードドライブにすべてインストール」を選択すると、インストール時にJAVA_HOME環境変数を設定してくれます。

Windows用のインストールパッケージはインストールすると自動的にPATH環境変数の設定(pathの追加)も行います。

例)PATH環境変数にインストールしたJDKのパスが追加される「C:\Program Files\AdoptOpenJDK\jdk-11.0.10.9-hotspot\bin」

WindowsのJDKバージョン切り替え

WSL2にインストールした場合は、Mac・Linuxと同じ方法で切り替えることができますが、直接AdoptOpenJDKをWindowsにインストールしたのでその場合の方法について説明します。

AdoptOpenJDKはインストール終了時に自動的にPATH環境変数にインストールしたJDKのパスを追加してくれます。

他のJDKについてもJavaコマンド類を使用するためにPATH環境変数を編集すると思います。

そして、WindowsはJavaコマンド実行時にこのPATH環境変数に設定しているパスを先頭から順に確認し、コマンドのありかを解決します。

なので先にPATH環境変数が解決できたバージョンが実行されることになります。

つまりPATH環境変数に設定しているパスの順番を入れ替えることで、Javaコマンド類のバージョンを切り替えることができます。

システムのプロパティから環境変数の編集画面を表示して、JDKのパス設定順番を入れ替えて利用したバージョンを切り替えます。

画面上から順番にPATH環境変数は解決されるので、利用したいJDKバージョンは他のものより上にくるよう順番を入れ替えます。

上記の画像ではAdoptOpenJDKをインストールしたときの例を表示していますが、他の種類のJDKの場合でもパスの順番を入れ替えることで利用したいJDKバージョンを指定できます。