alternativesでJavaのバージョン管理 anchor.png

alternativesを使用したJavaのバージョン管理を行ってみる。

Page Top

alternativesとは anchor.png

alternativesとは,同機能のバージョン違いなどのアプリケーションソフトウェアを,切り替えて使えるように管理するためのソフトウェア。

ユーザが実際に使用するコマンド等をシンボリックリンクしておいて,そのシンボリックリンクの指す実体を切替えたりすることでこれを実現している。

Page Top

複数のJDKのインストール anchor.png

例として,複数の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 
Page Top

alternativesに登録 anchor.png

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になっている。

Page Top

alternativesで作成されるシンボリックリンク anchor.png

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
Page Top

バージョンの切り替え anchor.png

--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
Page Top

現在のバージョン,ステータス,優先順位などの確認 anchor.png

--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
...
Page Top

非対話形式で設定 anchor.png

--setオプションを使用すると,非対話形式で変更出来る。

# alternatives --set java /opt/jdk1.8.0_45/bin/java

ステータスをautoからmanualに戻したい場合は,--configか--setでバージョンを変えると,自動でmanualに戻る。

Page Top

alternativesから除外 anchor.png

alternativesの管理から除外したい場合は,--removeを使用する。

# alternatives --remove java /opt/jdk1.7.0_79/bin/java
Page Top

JAVA_HOMEの設定 anchor.png

コマンドだけではなく,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

コメント一覧

新しくコメントをつける

題名
ゲスト名   :
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 97, today: 1, yesterday: 1
Last-modified: 2018-09-12 (Wed) 14:06:33 (JST) (277d) by yuji
ユーザ名:

パスワード:



パスワード紛失

新規登録