jEnvを用いたJava環境のセットアップ

Posted on June 16, 2019 by nobiruwa

tl;dr

$ git clone https://github.com/gcuisinier/jenv.git ~/.jenv
$ cat << EOF >> ~/.profile
JENV_HOME="$HOME/.jenv"
JENV_BIN="$JENV_HOME/bin"
if [ -d "$JENV_BIN" ]; then
    export PATH="$JENV_BIN:$PATH"
    # rehash after init, because my login shell is dash.
    eval "$(jenv init --no-rehash -)"
    (jenv rehash &) 2> /dev/null
fi
EOF

動機

Java 8を使うことが多いのですが、Debian Unstableではデフォルトが11, 12とどんどんあがっていきます。そこで、Rubyのrbenv/rbenvのように一般ユーザーがJavaのバージョンを容易に変更できるようにしたいと思いました。

セットアップ

おおまかな手順

rbenvのフォークをセットアップする際は、おおむね以下の手順に従います。

ログインシェルにdashを使っているため公式ではeval $(jenv init -)を実行しているところ、 eval $(xxenv init --no-rehash -)xxenv rehashに分けています。

  1. xxenvリポジトリを~/.xxenvにチェックアウトする。
  2. xxenv-buildリポジトリをgit clone~/.xxenv/plugins/xxenv-buildにチェックアウトする。
  3. ~/.profile(Debian系の場合)に以下の記述を追加する。
    • export PATH=$HOME/.xxenv/bin:$PATH
    • eval $(xxenv init --no-rehash -)
    • eval (xxenv rehash &) 2> /dev/null

jenvのセットアップは以下の通りです。

jEnvのチェックアウト

jEnvの公式にある通りです。

jenvリポジトリをチェックアウトします。

場所は公式に合わせて~/.jenvとします。

$ git clone https://github.com/gcuisinier/jenv.git ~/.jenv

~/.profileの記述

~/.profileにて、環境変数PATHを設定します。

JENV_HOME="$HOME/.jenv"
JENV_BIN="$JENV_HOME/bin"
if [ -d "$JENV_BIN" ]; then
    export PATH="$JENV_BIN:$PATH"
    # rehash after init, because my login shell is dash.
    eval "$(jenv init --no-rehash -)"
    (jenv rehash &) 2> /dev/null
fi

JDKの入手

OpenJDKのバイナリはGitHubで配布しています。

好みのバージョンのzipファイルをダウンロードし、~/optなどに展開してください。

JDKの登録

jEnvにJDKを登録します。

$ jenv add <JDKのパス>

登録されたJDKは下記のコマンドで確認できます。

$ jenv versions

グローバルのJava環境

グローバルのJava環境を指定します。

$ jenv global <jenv versionsで列挙されるバージョン文字列>

ローカルのJava環境

ローカルのJava環境を設定するには、以下のコマンドを実行します。

$ cd <設定したいディレクトリ>
$ jenv local <jenv versionsで列挙されるバージョン文字列>

jenv localを実行したディレクトリには.java-versionファイルが生成されます。

jenv localを実行したディレクトリとその子孫ディレクトリで実行するjava/javacコマンドは、.java-versionで指定されたJava環境のものが使用されます。

プラグインの有効化

いくつかのプラグインを有効にします。たとえば、exportプラグインはグローバルのJava環境をJAVA_HOMEに設定します。

$ jenv enable-plugin export
$ jenv enable-plugin maven
$ jenv enable-plugin gradle

ログインシェルがdashである場合は"$(jenv init -)"が働かず便利なjenv関数を定義しません。

そのため、サブコマンドにsh-プリフィックスを付けて実行してください。

$ jenv sh-enable-plugin export
$ jenv sh-enable-plugin maven
$ jenv sh-enable-plugin gradle