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