HomebrewでインストールできるJDKまとめ（2022年4月時点）

この記事は、2019年11月に記載したものを「[CIST (公立千歳科学技術大学) Advent Calendar 2021](https://qiita.com/advent-calendar/2021/cist)」および「[cistLT Advent Calendar 2021](https://adventar.org/calendars/6520)」用に更新したものです。（アドベントカレンダーの投稿としては邪道じゃね、と思ったけど時間がなかった...あと結局だいたい書き直しだった）

その後も適宜更新を続けています。最後に更新をしたのは2022年4月です。

## はじめに

### 2022年4月の更新と意図

Java 18 がリリースされたのですが、バージョン番号を指定せずに`brew install`すると、 **最新版のJDK（つまり18）をインストールするもの** と、**最新のLTS版のJDK（つまり17）をインストールするもの**が ありました。

取り急ぎ、記事の中のコメントアウトで 最新のJDK、最新のLTS版 などのように分けて書きましたが、わかりづらいので違った形でまとめたほうがいいかもしれないですね（未来の自分に託します）。

JDKを `brew install` するときは、導入したいメジャーバージョンにあっているか、念のためご注意ください。


### 2021年12月の更新と意図

2021年、今年の秋にはJava 17もリリースされましたね。

この記事は、過去に記載したものだったのですが、私の投稿にしては珍しく、継続してLGTM等をいただく記事ですので、最新版に編集しなおしました。いわゆる令和最新版というやつです。

## この記事の狙い

homebrewでインストールできる、各ディストリビューターのビルドによるOpen JDKと、そのコマンドをまとめておきます。

なお、この記事の執筆・更新時点で、最新バージョンは Java 18、 LTS（Long Term Support版）は Java 17 です。

## Homebrew 

### openjdk

```sh
# OpenJDK, 最新のJDK版
brew install openjdk
```

[OpenJDK](https://openjdk.java.net/) の最新バージョンが**手元でビルド&インストール**されます。<br>ただし、`keg-only` 指定なので、インストール後に `$JAVA_HOME` 用のフォルダへのシンボリックリンクを貼る必要があります。

```sh
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
```

```sh:.bashrcなど（PATHの通し方）
# xx はインストールしたJDKのバージョン（例:17）
export JAVA_HOME=`/usr/libexec/java_home -v xx`
```

@バージョン番号で、リリース済みのLTSバージョンもビルド＆インストールできるようです。

```sh
# OpenJDK, LTS版（JDK 17）
brew install openjdk@17

# OpenJDK, LTS版（JDK 11）
brew install openjdk@11

# OpenJDK, LTS版（JDK 8）
brew install openjdk@８
```

## Homebrew Cask

### oracle-jdk

```sh
#Oracleが提供する最新のLTS版（JDK 17）
brew install --cask oracle-java
```

Oracleが提供する[NFTC: Oracle No-Fee Terms and Conditions](https://www.oracle.com/java/technologies/downloads/) ライセンスのLTSバージョンがインストールされます。

**Note That:**

NFTCライセンスは、JDK 17からOracleが採用したライセンスで、[Developers Festa Sapporo 2021](https://www.devfesta.jp/)でOracleの伊藤敬さんから伺った際の自分用メモによると、以下のような特徴があります。

- 無償で商用での本番利用可能(ただし、internal business operations なので、社内システムなどはOK、SaaSなどには使えない)
- NFTCでの提供期間は次のLTSリリースから1年後(移行期間として見込まれる)
- その後は商用の本番利用不可のOTN（Oracle Technology Network）ライセンスへ切り替わる

詳しくはこちらに日本語での解説があります：[Oracle Java SEライセンスに関するFAQ](https://www.oracle.com/jp/java/technologies/javase/jdk-faqs.html)

Logicoさんの翻訳記事も参考になるかと：[The arrival of Java 17!](https://logico-jp.io/2021/09/15/the-arrival-of-java-17/)

### Temurin

```sh
# Eclipse Adoptiumが提供する最新のLTS版（JDK 17, Hotspot VM）
brew install --cask temurin
```

[Eclipse Adoptium](https://adoptium.net/)に移管された[AdoptOpenJDK](https://adoptopenjdk.net/)のHotSpot VMです。

AdoptOpenJDKとしてのリリースは16まで、17の段階でEclipse Adoptiumに移行して、LTSバージョンのビルドが提供されています。

これまでAdoptOpenJDK(HotSpot VM)ユーザーだった方は、こちらに切り替えるとすんなりいくのかもしれません（別のディストリビューションのビルドでもいいと思いますけど）

過去のLTMもインストールできます。

```sh
# Eclipse Adoptiumが提供するLTS版（JDK 11, HotSpot VM）
brew install --cask temurin11

# Eclipse Adoptiumが提供するLTS版（JDK 8, HotSpot VM）
brew install --cask temurin8
```

### microsoft-openjdk

```sh
# Microsoftが提供する最新のLTS版（JDK 17）
brew install --cask microsoft-openjdk
```
[Microsoft](https://docs.microsoft.com/ja-jp/java/openjdk/download) がビルドしたJDKです。

Microsoft版のコンセプトはマイクロソフトの寺田さんの記事[こちら](https://qiita.com/yoshioterada/items/38cc9e5e0c95f8be84e1)や[こちら](https://qiita.com/yoshioterada/items/2a54dfb60a02a26a2c35)が詳しいと思います。

過去のLTSは、本日の時点でJDK 11だけです。

```sh
# Microsoftが提供するLTS版（JDK 11）
brew install --cask microsoft-openjdk11
```

### zulu

```sh
# Azulが提供する最新のLTS版（JDK 17）
brew install --cask zulu
```

[Azul社が提供するZulu JDK](https://www.azul.com/downloads/zulu/zulu-mac/)がインストールされます。

Azulが[LTSや独自にMTS:Medium Tearm Support版を提供している旧バージョン](https://www.azul.com/products/azul-support-roadmap/)もインストールできるようです。

JDK 7は事情により上のバージョンにアップデートできない人に、MTSは徐々に17までアップデートしたい人に助かるかも。

```sh
# Azulが提供するMTS版（JDK15）
brew install --cask zulu15

# Azulが提供するMTS版（JDK15+Java Fx?）
brew install --cask zulufx

# Azulが提供するMTS版（JDK13）
brew install --cask zulu13

# Azulが提供するLTS版（JDK11）
brew install --cask zulu11

# Azulが提供するLTS版（JDK8）
brew install --cask zulu8

# Azulが提供するLTS版（JDK7）
brew install --cask zulu7
```

### corretto

```sh
# Amazon Corretto （最新のJDK）
brew install --cask corretto
```

Amazon Linuxなどに採用されている[Amazon Correto](https://aws.amazon.com/jp/corretto/) がインストールされます。

AWS系で触っている方も多いのではと思います。過去バージョンもJDKのLTSバージョンと合わせられています。

```sh
# Amazon Corretto 17（LTS版）
brew install --cask corretto17

# Amazon Corretto 11（LTS版）
brew install --cask corretto11

# Amazon Corretto 8（LTS版）
brew install --cask corretto8
```

### sapmachine-jdk

```sh
#SAPが提供する最新のJDK
brew install --cask sapmachine-jdk
```

[SAPが提供するOpenJDK（SapMachine）](https://sap.github.io/SapMachine/)がインストールされます。

Homebrew上には今のところ、最新版のJDKしかない（LTS版がない）ようです。

### semeru-jdk-open

```sh
# IBMが提供する最新のLTS版（JDK 17, Openj9）
brew install --cask semeru-jdk-open
```

[IBM](https://developer.ibm.com/languages/java/semeru-runtimes/)に移管された[AdoptOpenJDK](https://adoptopenjdk.net/)のOpenJ9版です。

これまでAdoptOpenJDK(OpenJ9)ユーザーだった方は、こちらに切り替えるとすんなりいくのかもしれません。

過去のLTMもインストールできます。

```sh
# IBMが提供するLTS版（JDK 11, Openj9）
brew install --cask semeru-jdk-open11

# IBMが提供するLTS版（JDK 8, Openj9）
brew install --cask semeru-jdk-open8
```

ちなみに、IBM Semeru Runtimeについては[こちらの記事](https://qiita.com/TTakakiyo/items/7a0f3bab4313a3e84c9e)が参考になります。

### liberica

```sh
brew tap bell-sw/liberica
```

```sh
# BellSoftが提供するLTS版（JDK 17）
brew intall --cask liberica-jdk17
```

[BellSostが提供するLiberica JDK](https://bell-sw.com/pages/downloads/) がインストールされます。

Liberica JDKはJava FX（正確にはLibericaFX）をバンドルしているFull版や、クラウド用に容量最適化したLite版など、Open JDKそのままではなく、Bellsoft独自の追加機能を施して提供するJDKも提供されています。またJRE版も提供されています。


```sh
# BellSoftが提供するFull版（JDK 17+LibericaFX）
brew intall --cask liberica-jdk17-full

# BellSoftが提供するLite版（JDK 17, 容量最適化）
brew intall --cask liberica-jdk17-lite

# BellSoftが提供するLTS版（JDK 17, JREのみ）
brew intall --cask liberica-jre17
```

過去のものも残されているので、バージョン番号の部分を8, 11〜16に変えてあげれば、それぞれのバージョンのものがインストールできます（もちろん、LTSである8, 11以外のSTS:Short Term Support版が保守サポートされているという意味ではありません）。詳しくは https://github.com/bell-sw/homebrew-liberica を参照してください。

### adoptopenjdk

もともとこの記事は、

```
AdoptOpenJDK と Cask-Versions が衝突するなどしていた、homebrewでインストールできるJDK界隈ですが、一応の整理がついたようです。

https://github.com/Homebrew/homebrew-cask/pull/63537
```

これをきっかけに記述したものですが、2年という歳月は業界の変化を呼び起こすには十分な時期ということなのでしょう、Eclipse Adoptium（Temurin）といIBM（Semeru）に移管していまいました。

**注意点として、今後adoptopenjdkが17移行に更新されることはないと思われるので、以前、AdoptOpenJDKをHomebrew/Homebrew Caskでインストールしている場合は、別のディストリビューターのJDKに切り替え（再インストール）しないと、開発環境が古いままになってしまいます**。

とはいえHomebrew上では、JDK 8-16 までのCaskは残っています。どうしてもこの間のバージョンが検証用に欲しい時などは選択肢になるかもですね。

というわけで下記にインストール方法を残しておきます。

```sh
# AdoptOpenJDK, HotSpot版の16
brew install adoptopenjdk

# AdoptOpenJDK, HotSpot版の8
brew install adoptopenjdk8
```

[AdoptOpenJDK.net Community がビルドした OpenJDK](https://adoptopenjdk.net/) がインストールされます。

AdoptOpenJDK/openjdk をtapすることで、バージョンの指定や、HotSpot VM版以外にも、J9版などがcask インストールできるようになります。

```sh
brew tap AdoptOpenJDK/openjdk
```

```sh
# AdoptOpenJDK, HotSpot VMの11
brew install --cask  adoptopenjdk11

# AdoptOpenJDK, HotSpot VMの11, JREのみ
brew install --cask adoptopenjdk11-jre

# AdoptOpenJDK, OpenJ9の11
brew install --cask adoptopenjdk11-openj9

# AdoptOpenJDK, OpenJ9の11, JREのみ
brew install --cask adoptopenjdk11-openj9-jre

# AdoptOpenJDK, OpenJ9の11, JREのみ, LargeHeap版?
brew install --cask adoptopenjdk11-openj9-jre-large
```

過去のものも残されているので、バージョン番号の部分を8から16に変えてあげれば、それぞれのバージョンのものがインストールできます（もちろん保守サポートされているという意味ではありません。また、JREやOpenJ9の用意がないバージョンもあります）。詳しくは https://github.com/AdoptOpenJDK/homebrew-openjdk/tree/master/Casks を参照してください。

### java6

```sh
#過去にAppleが提供していたOSX用のJDK6
brew install --cask java6
```

過去に[Appleが提供していた JavaForOSX.dmg](https://support.apple.com/kb/DL1572?locale=ja_JP) です。

古いOSX用なので、インストール用途は限定的と思います。


## どのJDKをインストールすれば良いか？

[OpenJDKソムリエに関連するまとめ](https://togetter.com/t/OpenJDK%E3%82%BD%E3%83%A0%E3%83%AA%E3%82%A8) あたりの資料ややりとりをウォッチしつつ、提供元やライセンス、LTS, MTS, STS版の提供状況で自分の環境に合うディストリビューターのものを選ぶのが良い感じです。

なお、この記事には詳しくは書いていませんが、JDK11ぐらいからのHomebrewでの提供状況を見ていくと、次のリリースのEarly Access版や、将来のSTS版（例えばJDK 18, 19,...）がHomebrew上で提供されるかは、ディストリビューターの提供状況や、caskにこまめにコミットする人がいるかによってまちまちです。（例えばディストリビューターがLTS版やSTS版を提供していても、Homebrewにない場合もある）

最新のSTSを追いたい場合、HomebrewにないJDKを網羅したい場合、複数のJDKを使い分け・切り替えしたい場合は [SDKMAN!](https://sdkman.io/)の利用を検討したほうが良いと思います。

Homebrew でのJDKインストールを充実させたいなと思った人はぜひHomebrew Caskにコミットしていきましょう。

## おわりに

これもインストールできるよ？ などあれば教えてください。