alternativesを使用したJavaのバージョン管理を行ってみる。
alternativesとは,同機能のバージョン違いなどのアプリケーションソフトウェアを,切り替えて使えるように管理するためのソフトウェア。
ユーザが実際に使用するコマンド等をシンボリックリンクしておいて,そのシンボリックリンクの指す実体を切替えたりすることでこれを実現している。
例として,複数のJDKをインストールしておいて,それらからあるバージョンのJava JDKを使用することにしてみます。
バージョン違いのOracle JDKをインストールするのですが,インストールする時にwgetなどで素直にダウンロードすることは出来ない。これは,ライセンス同意チェックを行っているから。
Java SE - Downloads からJDKのダウンロードURLを確認する。
JDKをクリックすると,ダウンロード画面が表示される。
ライセンス規約に同意(Accept License Agreement)をチェックして,そのリンクアドレスをコピーする。
同意してないとリンクがコピー出来ない。
(今回はインストールに,tar.gzのファイルを使用している。)
wgetでは,次のようにCookieを渡すパラメータを付加すればダウンロード出来る。後は,インストールしておく。
# cd work/java # wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u45-linux-x64.tar.gz" -O jdk-8u45-linux-x64.tar.gz # cd /usr/java # tar xzf ~/work/java/jdk-8u45-linux-x64.tar.gz
同様にして,他のJDKもダウンロードしてインストールしておく。
# cd work/java # wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-7u79-linux-x64.tar.gz" -O jdk-7u79-linux-x64.tar.gz # cd /usr/java # tar xzf ~/work/java/jdk-7u79-linux-x64.tar.gz
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)
確かに,Java 8になっている。
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
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の管理から除外したい場合は,--removeを使用する。
# alternatives --remove java /opt/jdk1.7.0_79/bin/java
コマンドだけではなく,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
新しくコメントをつける