Featured image of post 「jenv」でJavaのバージョンを切り替える方法【anyenv】

「jenv」でJavaのバージョンを切り替える方法【anyenv】

Javaのバージョンをコマンド一つで切り替えられる「jenv」の導入方法。anyenv経由でのインストール、環境変数の設定、caskroom/versionsでJava8とJava11のJDKをダウンロード、jenvへの追加、globalとlocalでの切り替えまで♪

1652文字

JavaのバージョンはOracleのせいで闇が深い

皆さんはJava言語を使って開発をしたことはありますか?

RubyやPHPなどの他の言語と同様に、バージョンの概念を持っていますが、Oracleが絡んでいるのでJavaのバージョンについてはちょっと一癖あります。

しかし、そんなめんどくさいJavaにも他の言語と同様に「jenv」と呼ばれる便利なバージョン管理ツールが出ています。

今回はそちらのインストール方法と使い方をご紹介していこうと思います。

手順

前提

今回は、以前ご紹介したanyenv経由でjenvをインストールしようと思っていますので、まずはそちらを見て頂ければなと思います。

関連記事 【JavaやRuby含めほとんどの言語に対応】Homebrewで「anyenv」をインストールしてhodenvを使ってバージョン管理をする方法まとめ【fish shellも対応】 2019/06/27 1985文字 約4分で読めます IT Java Mac Python アプリケーション

jenvのインストール

ではまずはanyenv経由でjenvをインストールしましょう。

anyenv install jenv
/var/folders/5k/s10ppj590d534615rmtkm9cm0000gn/T/jenv.20190619153804.29063 ~
Cloning https://github.com/jenv/jenv.git master to jenv...
Cloning into 'jenv'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 1088 (delta 2), reused 5 (delta 0), pack-reused 1073
Receiving objects: 100% (1088/1088), 414.45 KiB | 424.00 KiB/s, done.
Resolving deltas: 100% (478/478), done.
~

Install jenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

環境変数の設定

次に環境変数を設定します。

~/.config/fish/config.fis
...
()
...
#jenv
set -x JENV_ROOT $ANYENV_ROOT/envs/jenv/
set -x PATH $JENV_ROOT/bin $PATH
set -x PATH $JENV_ROOT/shims $PATH
...
()
...

確認

jenv
jenv 0.5.2-4-gd8ffd5b
Usage: jenv <command> [<args>]

Some useful jenv commands are:
   commands    List all available jenv commands
   local       Set or show the local application-specific Java version
   global      Set or show the global Java version
   shell       Set or show the shell-specific Java version
   rehash      Rehash jenv shims (run this after installing executables)
   version     Show the current Java version and its origin
   versions    List all Java versions available to jenv
   which       Display the full path to an executable
   whence      List all Java versions that contain the given executable
   add         Add JDK into jenv. A alias name will be generated by parsing "java -version"

See `jenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/hikage/jenv#readme

brew tap caskroom/versionsの設定

今回はHomebrewで複数のJavaを管理したいので、caskroom/versionsを導入します。

brew tap caskroom/versions
==> Tapping caskroom/versions
Cloning into '/usr/local/Homebrew/Library/Taps/caskroom/homebrew-versions'...
remote: Enumerating objects: 202, done.
remote: Counting objects: 100% (202/202), done.
remote: Compressing objects: 100% (198/198), done.
remote: Total 202 (delta 10), reused 32 (delta 1), pack-reused 0
Receiving objects: 100% (202/202), 86.17 KiB | 418.00 KiB/s, done.
Resolving deltas: 100% (10/10), done.
Tapped 173 casks (220 files, 329.7KB).



JDKのダウンロード

次はJDKをダウンロードしましょう。今回はJava8とJava11を用意します。

Java8

Java8はライセンスの関係で2019年6月19日時点でインストール不可能なので、後述のいずれかで代用する必要があります。
ちなみに、後述の作業で分かるのですが今回インストールした時点ではいずれも中身は同じopenjdk64-1.8.0.212のようでした。

AdoptOpenJDK 8
関連記事 【オラクルのJava有償化問題】無償のJDK「AdoptOpenJDK」をmacにインストールする方法【やり方紹介】 2018/10/22 1843文字 約4分で読めます IT Homebrew Java Mac カスタマイズ

brew cask install adoptopenjdk8
==> Satisfying dependencies
==> Downloading https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u212-b03/OpenJDK8U-jdk_x64_mac_hotspot_8u212b03.pkg
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/140418865/07e4b900-61d1-11e9-96f2-868c40733c49?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSV
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'adoptopenjdk8'.
==> Installing Cask adoptopenjdk8
==> Running installer for adoptopenjdk8; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is AdoptOpenJDK
installer: Installing at base path /
installer: The install was successful.
🍺  adoptopenjdk8 was successfully installed!

Corretto 8

brew cask install corretto8
==> Satisfying dependencies
==> Downloading https://d3pxv6yz143wms.cloudfront.net/8.212.04.2/amazon-corretto-8.212.04.2-macosx-x64.pkg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'corretto8'.
==> Installing Cask corretto8
==> Running installer for corretto8; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
installer: Package name is Amazon Corretto 8
installer: Installing at base path /
installer: The install was successful.
🍺  corretto8 was successfully installed!

Java 11

brew cask install java11
==> Satisfying dependencies
==> Downloading https://download.oracle.com/java/GA/jdk11/9/GPL/openjdk-11.0.2_osx-x64_bin.tar.gz
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'java11'.
==> Installing Cask java11
==> Moving Generic Artifact 'jdk-11.0.2.jdk' to '/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk'.
Password:
🍺  java11 was successfully installed!

確認

/usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    11.0.2, x86_64:	"OpenJDK 11.0.2"	/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home
    1.8.0_212, x86_64:	"Amazon Corretto 8"	/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
    1.8.0_212, x86_64:	"AdoptOpenJDK 8"	/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

jenvの管理対象に追加

インストールしたJDKをjenvの管理対象として追加していきましょう。

JDK追加
jenv add /Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home
openjdk64-11.0.2 added
11.0.2 added
11.0 added

jenv add /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
openjdk64-1.8.0.212 added
1.8.0.212 added
1.8 added

jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
 openjdk64-1.8.0.212 already present, skip installation
 1.8.0.212 already present, skip installation
 1.8 already present, skip installation

# 内部的に同じopenjdkを使っているらしいので、スキップされた

確認

jenv versions
*  system
 1.8 (set by /Users/blogenist/.anyenv/envs/jenv/version)
  1.8.0.212
  11.0
  11.0.2
  openjdk64-1.8.0.212
  openjdk64-11.0.2

バージョンの変更

グローバルの場合

コマンド
jenv global 1.8

確認

java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment Corretto-8.212.04.2 (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM Corretto-8.212.04.2 (build 25.212-b04, mixed mode)

ローカルの場合

コマンド
jenv local 11.0

カレントディレクトリに以下のlocal用の設定ファイルが生成されます。

.java-version
11.0

確認

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)

終わりに

以上のように簡単にJavaのバージョンも切り替える事が可能になりました。

Javaのバージョン切り替えは環境変数を都度変えたりする必要があったりととてもめんどくさかったので、jenvを使って幸せになってみてください♪