torutkのブログ

ソフトウェア・エンジニアのブログ

macOS上でのJava開発環境

macOSJava開発キット(JDK)を入れる

JDKの提供サイトからmacOS用のdmgファイルを入手して実行するのがオーソドックスなやり方です。

他には、Homebrewと呼ばれるソフトウェアのパッケージ管理ツールを入れて、Homebrew経由でJDKを入れる方法もあります。Homebrewで管理されているパッケージであれば、個別に提供サイトを巡回して更新バージョンを確認し、更新があれば再度dmgファイルを入手してインストールするといった手間が省けます。

そこで、ここではHomebrew経由でJDKを入れる方法をメモします。

Homebrewを入れる方法は、次に記述しました。

Homebrew - ソフトウェアエンジニアリング - Torutk

Homebrewで入手できるJDK

OpenJDKディストリビューション Homebrewパッケージ名 リポジトリ 備考
Oracle JDK oracle-jdk Casks 17.0.1
Oracle OpenJDK openjdk Formulae 17.0.1
Oracle OpenJDK openjdk@?? Formulae ?? には、8と11が存在
Eclipse Temurin temurin Casks 17.0.1,12
Eclipse Temurin temrin?? cask-versions ?? には、8と11が存在
Azul Zulu zulu Casks 17.0.1,17.30.15-ca
Azul Zulu zulu?? cask-versions ?? には、7, 8, 11, 13, 15が存在
Azul ZuluFX zulufx Casks JavaFX搭載、15.0.5,15.36.51-ca
Amazon Corretto corretto Casks 17.0.1.12.1
Amazon Corretto corretto?? cask-versions ?? には、8と11が存在
Bellsoft Liberica liberica-jdk?? bell-sw/liberica ?? には、8, 11, 12, 13, 14, 15, 16, 17が存在
Bellsoft Liberica liberica-jdk??-full bell-sw/liberica JavaFX搭載。?? には、8, 11, 12, 13, 14, 15, 16, 17が存在
Microsoft Build OpenJDK microsoft-openjdk Casks 17.0.1.12.1
Microsoft Build OpenJDK microsoft-openjdk?? cask-versions ?? には、11が存在
SAP Machine sapmachine-jdk Casks 17.0.1
  • FormulaeとCasksは、Homebrewインストールで設定されますが、それ以外のリポジトリは、追加のtap指定が必要

通常、最新バージョンがインストールされます。本日時点であれば、2021年9月にリリースされた JDK 17の2021年10月更新版がインストールされるかと思います。

しかし、開発対象が最新バージョンではなく、例えば JDK 11であったりした場合は、そのバージョンのJDKをインストールしたくなります。そこで、上述の表で ?? とバージョン番号がパッケージ名称に付くものをインストールします。

OpenJDKディストリビューションについては、次に記載しました。

OpenJDK - ソフトウェアエンジニアリング - Torutk

Zulu11をインストール

先のLTS版であるJDKのバージョン11で、Appleシリコン(M1チップセット、ARM命令セット)に対応しているものの一つがZuluです。

zulu?? は、cask-versions リポジトリを使用するので、tapで指定します。

% brew tap homebrew/cask-versions

続いて、インストールします。

% brew install --cask zulu11

インストール後は環境設定を特にせずともjavaコマンドが使えました。/usr/bin/java コマンド他が追加されています。

liberica-jdk17-full をインストール

JavaFXを搭載し、最新LTS版(OpenJDK 17)である17を含むパッケージ名である Bell Soft社のLiberica JDKです。

% brew tap bell-sw/liberica
% brew install --cask liberica-jdk17-full

先にzulu11を入れた環境にliberica-jdk17-fullをインストールした後、javaコマンドはこのliberica-jdk17-fullを指すようになりました。

macOSで複数バージョンのOpenJDKを併用する場合の設定

macOSでは、通常 OpenJDKをインストールすると、次の場所に置かれます。

/Library/Java/JavaVirtualMachines/
  +-- liberica-jdk-17-full.jdk/
  +-- zulu-11.jdk/

そして、/usr/bin/java などのコマンドがどのOpenJDKを指すのかを管理しているのが @/usr/libexec/java_home@ツールです。

オプションなしで実行すると、現在アクティブなOpenJDKのパスを表示します。

% /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home

オプション-Vを付けると、インストール済みのOpenJDKの一覧と、現在アクティブなOpenJDKのパスを表示します。

% /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    17.0.1+12-LTS (arm64) "BellSoft" - "BellSoft Liberica JDK 17.0.1+12" /Libray/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home
    11.0.13 (arm64) "Azul Systems, Inc." - "Zulu 11.52.13" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home

オプション-v <バージョン番号>を付けると、指定したバージョンのOpenJDKのパスを表示します。

% /usr/libexec/java_home -v 11
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

環境変数JAVA_HOMEに、このjava_homeコマンドの結果を設定します。

% export JAVA_HOME=`/usr/libexec/java_home -v 11`
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
% java --version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime Environment Zulu11.52+13-CA (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM Zulu11.52+13-CA (build 11.0.13+8-LTS, mixed mode)

/usr/bin/java などのJDKコマンドは、デフォルトでは最新のOpenJDKバージョンを実行しますが、環境変数JAVA_HOMEが設定されていると、それが示すパスのOpenJDKを実行します。

  • 異なるディストリビューションで同じバージョンを入れている場合、指定が困難です。その時は、JEnvを導入すると解決できるようです。