jEnvでJavaのバージョン管理

スポンサーリンク

jEnv は Ruby の rbenv や Python の pyenv のようにバージョンを管理して簡単に切り替える事ができるツールです。公式サイトには JAVA_HOME の設定忘れを防ぐためのツールとあります。

f:id:tasukujp:20190407234137p:plain

jEnv - Manage your Java environment

インストール

インストールは以下の通りです。

# Linux
$ git clone https://github.com/gcuisinier/jenv.git ~/.jenv
# Homebrew
$ brew install jenv

インストールした先にパスを通すのと jenv init がシェル起動時に実行されるようにします。

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(jenv init -)"' >> ~/.bashrc

シェルを再起動したらパスが通っている事を確認してください。

$ exec $SHELL -l
$ $ jenv --help
jenv 0.5.2
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

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

コマンドは help で表示されたものが全てかと思ったら、 jenv commands でいっぱい出てきます…。全て調べきれないのでおいおい機会があれば見てみます。

JDKのインストール

rbenv とかだと Ruby のインストールも一緒にできますが、jEnv は別でインストールしないといけません。JDK は以前だと Oracle のを使っていましたが、ライセンスが変わったので AdoptOpenJDK を使用します。

$ sudo curl -LO https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u202-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz
$ sudo tar zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u202b08.tar.gz
$ sudo curl -LO https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.2%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz
$ sudo tar zxvf OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz

jEnvにJavaを追加する

JDK がインストールできたら add コマンドで Java を jEnv に追加します。JDK のホームディレクトリを指定してください。

$ jenv add /opt/java/jdk8u202-b08
openjdk64-1.8.0.202 added
1.8.0.202 added
1.8 added
$ jenv add /opt/java/jdk-11.0.2+9
openjdk64-11.0.2 added
11.0.2 added
11.0 added

versions コマンドでインストール済みのバージョンが確認できます。メジャーバージョン単位で登録されるような感じでしょうか。

$ jenv versions
  11.0
  11.0.2
  1.8
  1.8.0.202
  openjdk64-11.0.2
  openjdk64-1.8.0.202

バージョンの切り替え

jenv global <version> でグローバルのバージョンを指定できます。

$ jenv global 1.8
$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.202-b08, mixed mode)
$ jenv version
1.8 (set by /home/vagrant/.jenv/version)

jenv local <version> でローカル(カレントディレクトリ)のバージョンを指定できます。

$ jenv local 11.0
$ java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.2+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.2+9, mixed mode)

どうやって制御しているかというと、コマンドを実行すると rbenv のように .java-version というファイルがカレントディレクトリに出来ています。

$ cat .java-version
11.0

jenv shell <version> は現在のシェルセッションでのみ有効になります。優先度としては shell => local => global のようですね。

$ jenv shell 1.8
$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.202-b08, mixed mode)

JAVA_HOMEについて

ツールの目的でもあった JAVA_HOME を確認してみると...設定されていません。

$ echo $JAVA_HOME

どうやら export プラグインを有効にしないといけないようです。

$ jenv enable-plugin export
You may restart your session to activate jenv export plugin echo export plugin activated
$ exec $SHELL -l

これで JAVA_HOME が設定されました。バージョンを切り替えると変わっていますね。

$ echo $JAVA_HOME
/home/vagrant/.jenv/versions/1.8
$ jenv global 11.0
$ echo $JAVA_HOME
/home/vagrant/.jenv/versions/11.0

関連記事

www.task-notes.com