Mac上でOpenJDKをインストール

2023/01/29に公開

はじめに

タイトル通り、Mac 上で OpenJDK のインストールする方法を紹介します。

OpenJDKとは

  • OpenJDK とは、オープンソースの Java 実装です。
  • Java の実装は、Oracle 社が提供しているものと、OpenJDK が提供しているものがあります。
  • Oracle 社が提供しているものは有料ですが、OpenJDK は無料で利用できます。よって商用サービスの開発など商用利用する場合には OpenJDK を利用することが多いです。
  • OpenJDK は、Oracle 社が提供しているものと同等の機能を持っています。多くの場合は OpenJDK で問題なく利用できます。

前提条件

以降でHomebrewがインストールされていることを前提として、OpenJDK をインストールする方法を紹介します。

バージョンを確認

インストール可能な OpenJDK のバージョンを確認します。

$ brew search openjdk
実行結果
==> Formulae
openjdk  openjdk@11  openjdk@17  openjdk@8  openj9  openvdb

==> Casks
adoptopenjdk  microsoft-openjdk  openkey

openjdk をインストールします。バージョン固定する場合は、openjdk@17 のようにバージョンを指定します。

パッケージ情報を確認

openjdk のパッケージ情報を確認します。バージョンを指定している場合は、openjdk@17 のようにバージョンを指定します。

$ brew info openjdk
実行結果
==> openjdk: stable 19.0.2 (bottled) [keg-only]
Development kit for the Java programming language
https://openjdk.java.net/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openjdk.rb
License: GPL-2.0-only with Classpath-exception-2.0
==> Dependencies
Build: autoconf ✔, pkg-config ✘
Required: giflib ✔, harfbuzz ✔, jpeg-turbo ✔, libpng ✔, little-cms2 ✔
==> Requirements
Build: Xcode ✔
Required: macOS >= 10.15==> Caveats
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because macOS provides similar software and installing this software in
parallel can cause all kinds of trouble.

==> Analytics
install: 167,118 (30 days), 553,687 (90 days), 2,593,291 (365 days)
install-on-request: 62,262 (30 days), 192,418 (90 days), 782,367 (365 days)
build-error: 480 (30 days)

上記のメッセージで重要な部分は [keg-only] です。[keg-only] とは、シンボリックリンクを作成しないという意味で、Homebrew でインストールしたパッケージを利用するには、シンボリックリンクを作成する必要があります。インストールする openjdk のバージョンは 19.0.2 となっていることもわかります。

==> openjdk: stable 19.0.2 (bottled) [keg-only]

なお、上記のメッセージにて、シンボリックリンクを作成するコマンドが表示されています。後ほど、このコマンドを実行します。

For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

パッケージをインストール

openjdk をインストールします。バージョン固定する場合は、openjdk@17 のようにバージョンを指定します。

$ brew install openjdk
実行結果
==> Fetching openjdk
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/manifests/19.0.2
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/blobs/sha256:77f0d28cc4f5c8bd5907b5080fd760930326f1b12e7afbf2361b2527f960d6e9
==> Pouring openjdk--19.0.2.monterey.bottle.tar.gz
==> Caveats
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because macOS provides similar software and installing this software in
parallel can cause all kinds of trouble.

If you need to have openjdk first in your PATH, run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc

For compilers to find openjdk you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk/include"

==> Summary
🍺  /usr/local/Cellar/openjdk/19.0.2: 636 files, 318.7MB
==> Running `brew cleanup openjdk`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

パッケージ情報の確認同様に、インストール時のプロンプトにて、シンボリックリンクを作成するコマンドが表示されています。

For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

複数 Java の SDK がインストールされている場合、インストールした openjdk で java を実行するために、PATH を通す必要があると表示されています。

If you need to have openjdk first in your PATH, run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc

では、現時点で java と実行してみます。現時点では、①シンボリックリンクの作成、②PATH の通し、を行っていないため以下のようなエラーが表示されます。

$ java
実行結果
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.

シンボリックリンクを作成

インストール時のプロンプトに従い、シンボリックリンクを作成します。

For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

パスを通す

インストール時のプロンプトに従い、PATH を通します。

$ echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc

反映されているか確認します。

$ tail ~/.zshrc                                                                     ok  at 10:28:40
実行結果
export PATH="/usr/local/opt/openjdk/bin:$PATH"

動作確認

java コマンドを実行して、動作確認を行います。

$ java -version       
実行結果
openjdk version "19.0.2" 2023-01-17
OpenJDK Runtime Environment Homebrew (build 19.0.2)
OpenJDK 64-Bit Server VM Homebrew (build 19.0.2, mixed mode, sharing)```

パッケージ情報に表示されていた、19.0.2 のバージョンが正しくインストールされていることがわかります。

参考

Discussion