エンジニアを目指す初学者に向けて、わかりやすく解説したブログです。
サイトをリニューアルしました

MacにJavaをインストールする方法(SDKMAN!)

概要

今回はJavaのバージョンを切り替えできることを前提とする。

仕事で使う場合はバージョンの切り替えがよく必要になるからだ。

流れとしては、NodeやPython、Rubyの環境構築でよくやるパッケージマネージャーをインストールし、
それ経由でJavaのOpenJDKをインストールする。

SDKMAN!のインストール

まずは、パッケージマネージャーであるSDKMAN!をインストールする。

これはrbenvなどと同じように、Javaのバージョン切り替えをかんたんにするものなので
これを使ってインストールするのが一番楽である。

Icon in a page linkInstallation | SDKMAN! the Software Development Kit Manager

上記のドキュメントに従い、インストールする。

curl -s "https://get.sdkman.io" | bash

インストールが終わると、 .zshrcもしくは .bash_profileに以下の処理が追加されているのを確認できる。

これで次からターミナルを起動したときに、SDKMAN!のコマンドのパスが通っている形になる。

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

インストールしたばかりは↑の情報が反映されていないので、手動で反映する。

source "$HOME/.sdkman/bin/sdkman-init.sh"

sdkコマンドを確認

sdkコマンドが使えるようになっているか確認。

$ sdk version

SDKMAN!
script: 5.19.0
native: 0.5.0

インストール可能なバージョンを確認

以下のコマンドでインストール可能なJavaのバージョン一覧を確認することができる。

sdk list java

このように、複数のベンダーと、そこから提供されているバージョンを確認することができる。

================================================================================
Available Java Versions for macOS 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 23.0.2       | amzn    |            | 23.0.2-amzn
               |     | 23.0.1       | amzn    |            | 23.0.1-amzn
               |     | 21.0.6       | amzn    |            | 21.0.6-amzn
               |     | 21.0.5       | amzn    |            | 21.0.5-amzn
               |     | 17.0.14      | amzn    |            | 17.0.14-amzn
               |     | 17.0.13      | amzn    |            | 17.0.13-amzn
               |     | 11.0.26      | amzn    |            | 11.0.26-amzn
               |     | 11.0.25      | amzn    |            | 11.0.25-amzn
               |     | 8.0.442      | amzn    |            | 8.0.442-amzn
               |     | 8.0.432      | amzn    |            | 8.0.432-amzn
 Gluon         |     | 22.1.0.1.r17 | gln     |            | 22.1.0.1.r17-gln
               |     | 22.1.0.1.r11 | gln     |            | 22.1.0.1.r11-gln
               |     | 22.0.0.3.r17 | gln     |            | 22.0.0.3.r17-gln
               |     | 22.0.0.3.r11 | gln     |            | 22.0.0.3.r11-gln
 GraalVM CE    |     | 23.0.2       | graalce |            | 23.0.2-graalce
               |     | 23.0.1       | graalce |            | 23.0.1-graalce
               |     | 21.0.2       | graalce |            | 21.0.2-graalce
               |     | 17.0.9       | graalce |            | 17.0.9-graalce

# 略

インストール

sdk install java <Identifier>

で特定のバージョンを指定してインストールすることができる。

今回は、temurinのバージョン23と、LTSの21をインストールしてみる。

■23をインストール

$ sdk install java 23.0.2-tem

Downloading: java 23.0.2-tem

In progress...

######################################################################################################################################################################### 100.0%

Repackaging Java 23.0.2-tem...

Done repackaging...
Cleaning up residual files...

Installing: java 23.0.2-tem
Done installing!


Setting java 23.0.2-tem as default.

■21をインストール

$ sdk install java 21.0.6-tem

Downloading: java 21.0.6-tem

In progress...

######################################################################################################################################################################### 100.0%

Repackaging Java 21.0.6-tem...

Done repackaging...
Cleaning up residual files...

Installing: java 21.0.6-tem
Done installing!

Do you want java 21.0.6-tem to be set as default? (Y/n): y  # ここでYESを選択したので、デフォルトが21になった

Setting java 21.0.6-tem as default.

今使っているバージョンを確認

期待通り、21が選択されていることを確認できた。

$ sdk current java

Using java version 21.0.6-te
$ java --version
openjdk 21.0.6 2025-01-21 LTS
OpenJDK Runtime Environment Temurin-21.0.6+7 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.6+7 (build 21.0.6+7-LTS, mixed mode)

パスもsdkmanを用いたものを参照することができている。

$ echo $JAVA_HOME
/Users/username/.sdkman/candidates/java/current

デフォルトで使うバージョンを指定

デフォルトで利用したいバージョンを指定する場合は、以下のように指定する。

$ sdk default java 23.0.2-tem
setting java 23.0.2-tem as the default version for all shells.

今どんなバージョンがローカルにインストールされているか確認

インストール可能なSDKを確認するコマンドで、確認することができる。

sdk list java

インストール済みのものは installedが表示される。

 Semeru        |     | 21.0.5       | sem     |            | 21.0.5-sem
               |     | 17.0.13      | sem     |            | 17.0.13-sem
               |     | 11.0.25      | sem     |            | 11.0.25-sem
               |     | 8.0.432      | sem     |            | 8.0.432-sem
 Temurin       |     | 23.0.2       | tem     | installed  | 23.0.2-tem
               |     | 23.0.1       | tem     |            | 23.0.1-tem
               | >>> | 21.0.6       | tem     | installed  | 21.0.6-tem
               |     | 21.0.5       | tem     |            | 21.0.5-tem

ディレクトリごとで使うバージョンを指定

envコマンドを使うと、プロジェクトごとにバージョンを指定することが可能。

初期設定

以下のコマンドで、そのディレクトリに .sdkmanrcが作られる。

$ sdk env init
.sdkmanrc created.

中身はこんな感じ。

$ cat .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=23.0.2-tem

現在のバージョン確認

$ sdk env

Using java version 23.0.2-tem in this shell.

設定をインストール

.sdkmanrcが既に存在するプロジェクトで、そのプロジェクトに関するSDKを自動でインストールするには、以下のコマンド。

sdk env install