alternativesを使用したJavaのバージョン管理です。ただし、alternatives自体はJava専用のものではないので汎用的に使えます。
alternativesとは
alternatives とは、同時にインストールされた、同機能を提供するソフトや、 バージョンの異なるソフトを管理するためのユーティリティです。
ユーザが実際に使用するコマンド等はシンボリックリンクになっており、 そのシンボリックリンクの指す実体を切替えたりといったことを行います。
JDKのダウンロード
まずはJDKを用意しますが、OracleJDK を wget や curl で素直にダウンロードすることはできないので、ライセンス同意チェックの Cookie をつけてやる必要があります。
Java SE - Downloads | Oracle Technology Network からJDKのダウンロードURLを確認します。
ライセンス規約に同意(Accept License Agreement)をチェックしてリンクアドレスをコピーします。同意してないとリンクがコピーできません。今回はrpmでのインストールではないのでtar.gz
のファイルを選択して下さい。
wget の場合は次のように Cookie を渡すパラメータを付加します。
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz" -O jdk-8u45-linux-x64.tar.gz # tar xzf jdk-8u45-linux-x64.tar.gz
切り替えを試すためにJDK1.7もダウンロードしておきましょう。
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz" -O jdk-7u79-linux-x64.tar.gz # tar xzf jdk-7u79-linux-x64.tar.gz
alternativesに登録
alternativesに登録しておくことで簡単にバージョンを切り替える事ができます。登録には--install
のコマンドを使用しますが、オプションは[作成するリンクパス] [管理名] [実体のパス] [優先度]
です。
Java7の優先度を 1、Java8の優先度を 2 で登録します。
# alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 1 # alternatives --install /usr/bin/java java /opt/jdk1.8.0_45/bin/java 2 # alternatives --config java There is 2 program that provides 'java'. Selection Command ----------------------------------------------- 1 /opt/jdk1.7.0_79/bin/java ** 2 /opt/jdk1.8.0_45/bin/java Enter to keep the current selection[+], or type selection number:
デフォルトでは後に登録された方が有効になります。
# java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
シンボリックリンクの流れ
alternativesの情報は/var/lib/alternatives/
以下に保存されます。
# cat /var/lib/alternatives/java manual /usr/bin/java /opt/jdk1.7.0_79/bin/java 1 /opt/jdk1.8.0_45/bin/java 2
/etc/alternatives/
以下に上記と同名のシンボリックリンクが作成されます。
# ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 25 May 24 15:14 /etc/alternatives/java -> /opt/jdk1.8.0_45/bin/java
実際に使用するコマンドは上記の/etc/alternatives/java
を指しています。
# which java /usr/bin/java # ls -l /usr/bin/java lrwxrwxrwx 1 root root 22 May 24 15:14 /usr/bin/java -> /etc/alternatives/java
バージョンの切り替え
--config
を使用すると対話形式で選択することが出来ます。
# alternatives --config java There is 2 program that provides 'java'. Auswahl Befehl ----------------------------------------------- 1 /opt/jdk1.7.0_79/bin/java *+ 2 /opt/jdk1.8.0_45/bin/java Eingabe um die vorgegebene Auswahl[+] zu behalten oder geben Sie die Nummer an:1
Java7に変わりました。
# java -version java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
シンボリックリンクも変わってます。
# ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 25 May 25 14:18 /etc/alternatives/java -> /opt/jdk1.7.0_79/bin/java
--display
オプションではインストール済みのJavaや、ステータス、優先度などが確認できます。
# alternatives --display java java - status is manual. link currently points to /opt/jdk1.7.0_79/bin/java /opt/jdk1.8.0_45/bin/java - priority 2 /opt/jdk1.7.0_79/bin/java - priority 1 Current `best' version is /opt/jdk1.8.0_45/bin/java.
ステータスが manual の場合は、手動で使用するバージョンを選択する必要があります。もうひとつ auto というステータスがありますが、auto の場合は優先度(priority)の高い方が選択されます。
auto に切り替えるには--auto
オプションを使用します。
# alternatives --auto java
優先度(priority)の高い Java8 が選択されました。
# java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
ステータスも auto に切り替わってます。
# alternatives --display java java - Status ist automatisch. Link verweist auf /opt/jdk1.8.0_45/bin/java ...
--set
オプションを使用すると非対話形式で変更できます。
# alternatives --set java /opt/jdk1.8.0_45/bin/java
ステータスを auto から manual に戻したい場合は、--config
か--set
でバージョンを変えると自動で manual に戻ります。
alternativesから除外
alternativesの管理から除外したい場合は--remove
を使用します。
# alternatives --remove java /opt/jdk1.7.0_79/bin/java
JAVA_HOMEの設定
コマンドだけではなく JAVA_HOME にも当然使用できます。むしろこっちの方が利用頻度高いですね。
# alternatives --install /usr/local/java_home java_home /opt/jdk1.7.0_79 1 # alternatives --install /usr/local/java_home java_home /opt/jdk1.8.0_45 2 # alternatives --config java_home Es gibt 2 Programme, welche 'java_home' zur Verfügung stellen. Auswahl Befehl ----------------------------------------------- 1 /opt/jdk1.7.0_79 *+ 2 /opt/jdk1.8.0_45 ... # /usr/local/java_home/bin/java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
/etc/profile.d/
に登録しておけば JAVA_HOME の切り替えも簡単になります。
# echo 'export JAVA_HOME=/usr/local/java_home' >> /etc/profile.d/jdk.sh