LoginSignup
520
450

Macで多様なJavaバージョンとディストリビューションを管理:HomebrewとjEnvの活用

Last updated at Posted at 2017-10-03

Homebrewのインストール

homebrew-cask-versionsの導入

$ brew tap homebrew/cask-versions

利用可能なディストリビューション

OpenJDK

  • 特徴: Javaの基本実装、広範囲のプラットフォーム対応
  • 注意点: 限定的な長期サポート、定期的なアップデートとセキュリティ更新の必要性
  • 商用利用: 可能

Eclipse Temurin

  • 特徴: パフォーマンスとセキュリティに重点、多様なJavaバージョンサポート
  • 注意点: コミュニティ主導で商用サポート限定、独自機能と互換性の潜在的問題
  • 商用利用: 可能

Amazon Corretto

  • 特徴: AWS最適化、長期サポート、セキュリティパッチ
  • 注意点: AWS外環境でのパフォーマンス非保証、AWSに特化
  • 商用利用: 可能

Oracle JDK

  • 特徴: Oracleによる公式Java版、高パフォーマンスとセキュリティ
  • 注意点: 有料ライセンスが必要、Oracleのサポートポリシー遵守
  • 商用利用: 有料ライセンスを購入すれば可能

Azul Zulu

  • 特徴: 商用サポート、多様なプラットフォーム互換性
  • 注意点: 商用ライセンス要、バージョンによる機能差異
  • 商用利用: 商用ライセンスを購入すれば可能

GraalVM

  • 特徴: 多言語対応、高性能、柔軟な実行と最適化
  • 注意点: 設定の複雑さ、特化機能、Javaライブラリ互換性の限定
  • 商用利用: ライセンス条項に従えば可能

Microsoft Build of OpenJDK

  • 特徴: Microsoftによるビルド、Azureとの統合、クロスプラットフォーム
  • 注意点: Microsoftエコシステム内利用重視、他プラットフォームサポート限定
  • 商用利用: 可能

SapMachine

  • 特徴: SAP製品互換性、定期更新とサポート
  • 注意点: SAP外環境での利点少ない、SAPアプリケーション最適化
  • 商用利用: 可能

インストール

Java 21のインストール

$ brew install openjdk
$ brew install --cask temurin
$ brew install --cask corretto
$ brew install --cask oracle-jdk
$ brew install --cask zulu
$ brew install --cask graalvm-jdk
$ brew install --cask microsoft-openjdk
$ brew install --cask sapmachine-jdk

Java 17のインストール

$ brew install openjdk@17
$ brew install --cask temurin17
$ brew install --cask corretto17
$ brew install --cask zulu17
$ brew install --cask graalvm-jdk17
$ brew install --cask microsoft-openjdk17

Java 11のインストール

$ brew install openjdk@11
$ brew install --cask temurin11
$ brew install --cask corretto11
$ brew install --cask zulu11
$ brew install --cask microsoft-openjdk11

Java 8のインストール

$ brew install openjdk@8
$ brew install --cask temurin8
$ brew install --cask corretto8
$ brew install --cask zulu8

インストール済みJDK(JAVA_HOME)の確認

  • /usr/libexec/java_homeコマンドを利用して、インストールされているJDKを確認できる
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (9):
    21.0.1 (x86_64) "Homebrew" - "OpenJDK 21.0.1" /usr/local/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home
    21.0.1 (x86_64) "Eclipse Adoptium" - "OpenJDK 21.0.1" /Users/seijikohara/Library/Java/JavaVirtualMachines/temurin-21.0.1/Contents/Home
    17.0.9 (x86_64) "Eclipse Adoptium" - "OpenJDK 17.0.9" /Users/seijikohara/Library/Java/JavaVirtualMachines/temurin-17.0.9/Contents/Home
    17.0.9 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Users/seijikohara/Library/Java/JavaVirtualMachines/corretto-17.0.9/Contents/Home
    17.0.8.1 (x86_64) "Eclipse Adoptium" - "OpenJDK 17.0.8.1" /Users/seijikohara/Library/Java/JavaVirtualMachines/temurin-17.0.8.1/Contents/Home
    17.0.8 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Users/seijikohara/Library/Java/JavaVirtualMachines/corretto-17.0.8/Contents/Home
    17.0.8 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Users/seijikohara/Library/Java/JavaVirtualMachines/corretto-17.0.8.1/Contents/Home
    17.0.8 (x86_64) "Eclipse Adoptium" - "OpenJDK 17.0.8" /Users/seijikohara/Library/Java/JavaVirtualMachines/temurin-17.0.8/Contents/Home
    11.0.21 (x86_64) "Homebrew" - "OpenJDK 11.0.21" /usr/local/Cellar/openjdk@11/11.0.21/libexec/openjdk.jdk/Contents/Home
/usr/local/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home

$ /usr/libexec/java_home --help
Usage: java_home [options...]
    Returns the path to a Java home directory from the current user's settings.

Options:
    [-v/--version   <version>]       Filter versions (as if JAVA_VERSION had been set in the environment).
    [-a/--arch      <architecture>]  Filter architecture (as if JAVA_ARCH had been set in the environment).
    [-F/--failfast]                  Fail when filters return no JVMs, do not continue with default.
    [   --exec      <command> ...]   Execute the $JAVA_HOME/bin/<command> with the remaining arguments.
    [-X/--xml]                       Print full JVM list and additional data as XML plist.
    [-V/--verbose]                   Print full JVM list with architectures.
    [-h/--help]                      This usage information.

JDKの切り替え

$ export JAVA_HOME=/usr/local/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home
$ PATH=${JAVA_HOME}/bin:${PATH}

jEnvの利用

jEnvのインストール

  • Homebrewでインストール
$ brew install jenv
  • PATHを設定
    • 使用するシェルにより異なる
# Shell: zsh
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc

# Shell: bash
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
  • ディレクトリを作成
$ cd ~
$ mkdir ~/.jenv/versions

jEnvにJDKを追加

  • JDKはHomebrew Caskでインストールする
    • インストールしたJDKをjEnvに追加する
$ jenv add /usr/local/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home

jEnvに追加されているJDKの一覧

  • 先頭に*が表示されているJDKが有効化されている
$ jenv versions
  system
* 21.0 (set by /Users/[ユーザ名]/.jenv/version)
  21.0.1
  temurin64-21.0.1

Javaの切り替え

  • jenv versionsで出力される任意のバージョンへ切り替えられる

グローバル

$ jenv global 21.0
$ jenv versions
  system
* 21.0 (set by /Users/[ユーザ名]/.jenv/version)
  21.0.1
  temurin64-21.0.1
$ java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode)

ローカル

  • 特定のディレクトリのみに適用する
    • コマンドを実行したディレクトリに.java-versionファイルが作成され、指定されたバージョンのJDKが利用可能となる
$ jenv local 11.0
$ jenv versions
  system
  1.8
  1.8.0.222
* 11.0 (set by [jenv localを実行したディレクトリ]/.java-version)
  11.0.2
  openjdk64-1.8.0.222
  openjdk64-11.0.2
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
$ cat .java-version
11.0

環境変数JAVA_HOMEの自動設定

  • 自動的にJAVA_HOMEを設定するにはenable-plugin exportを実行する
    • 自動設定を解除するにはdisable-plugin exportを実行する
$ jenv enable-plugin export
520
450
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
520
450