Ubuntu 18.04 にて jenv を用いて複数のバージョンの Java を使い分ける方法

大まかな流れ

  1. jenv をインストールして、シェルの設定を行う
  2. java の各バージョンをインストールしていく
  3. jenv add コマンドを使って jenv が扱う Java を追加していく
  4. jenv globaljenv local コマンドを使って用いる Java のバージョンを切りかえる

具体的な流れ

1. jenv をインストールして、シェルの設定を行う

他の Xenv と同様に、git clone して、シェルの設定ファイルに追記をします。以下、公式ドキュメントをそのまま引用します。

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

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

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

2. java の各バージョンをインストールしていく

たとえば、Java 8 のインストールは次のとおりとなります*1。利用したいバージョンの Java をインストールしていきます*2

$ sudo apt install openjdk-8-jdk

3. jenv add コマンドを使って jenv が扱う Java を追加していく

rbenv や goenv とは異なり、jenv versions に出てくるバージョン一覧にバージョン番号を追加するためには、jenv add というコマンドを実行して明示的に追加する必要があります。指定する場所は、各バージョンが実際に入っているディレクトリです。

各バージョンが実際に入っているディレクトリは、Ubuntuでは /usr/lib/jvm 配下に存在します。たとえば、Java 8 と Java 11 が入っている場合は以下のように ls コマンドが出力します。

$ cd /usr/lib/jvm
$ ls -la
.rw-r--r-- 2.7k root 19  7月  3:52 .java-1.8.0-openjdk-amd64.jinfo
.rw-r--r-- 2.0k root 19  7月  3:21 .java-1.11.0-openjdk-amd64.jinfo
lrwxrwxrwx   25 root 21  2月  1:31 default-java -> java-1.11.0-openjdk-amd64
lrwxrwxrwx   20 root 19  7月  3:52 java-1.8.0-openjdk-amd64 -> java-8-openjdk-amd64
lrwxrwxrwx   21 root 19  7月  3:21 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64
drwxr-xr-x    - root 13 10月 10:11 java-8-openjdk-amd64
drwxr-xr-x    - root 22  9月 14:00 java-11-openjdk-amd64

java-8-openjdk-amd64java-11-openjdk-amd64 が「各バージョンが実際に入っているディレクトリ」です。これらを jenv add して jenv versions コマンド実行時にリストに出てくるようにしましょう。

$ jenv add /usr/lib/jvm/java-8-openjdk-amd64
openjdk64-1.8.0.222 added
1.8.0.222 added
1.8 added

$ jenv add /usr/lib/jvm/java-11-openjdk-amd64
openjdk64-11.0.4 added
11.0.4 added
11.0 added
11 added

あらためて jenv versions をすると、jenv add したバージョンがリストに加わっています*3

$ jenv versions
* system (set by /home/USERNAME/.jenv/version)
  1.8
  1.8.0.222
  11
  11.0
  11.0.4
  openjdk64-1.8.0.222
  openjdk64-11.0.4

4. jenv globaljenv local コマンドを使って用いる Java のバージョンを切りかえる

ここまでできたならば、rbenv や goenv と同様に、jenv globaljenv local コマンドを用いてバージョンを切り替えることができます。以下、例です。

$ mkdir jenv_test
$ cd jenv_test
$ jenv local 1.8
$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
$ jenv local 11
$ java -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3, mixed mode, sharing)

参考

Mac については以前に記事に書きました。

obel.hatenablog.jp

*1:javac を用いて開発したい場合は jre ではなく jdk を入れます

*2:利用できるパッケージを調べたい場合には $ sudo apt search openjdk などを実行します

*3:jenv add する前では system しか出てきません

Powered by はてなブログ