#はじめに
###環境
- asianux7(※CentOS7.2相当)※ゲストOS、本番環境で試せないことを手軽に試すためにWinPCに試用版を導入
- Windows10 Professional ※ホストOS
- VirtualBox5.1.30
- Vagrant1.9.8
- alternatives 1.7.4 ※ディストリビューションに標準で入っているものです
###本記事の目的
javaでちょっとしたプログラムを作るためにJDKインストールを思い立ちました。
バージョンは最新のjava9を使いたいけど保険のためにjava8も入れて簡単に切り替えられる様にしたい。
alternativesは前にも使ったことがあるので思い出しながら作業する際の備忘録として投稿します。
###alternativesについて
複数バージョンのソフトや同じ機能をもった複数ソフトを管理して、切替ができるコマンドです。
###参考URL
以下のサイトを見て作業すれば事足ります(この記事いらない)。多謝。
CentOSのalternativesでJavaのバージョン管理
alternativesについて詳しい説明があるサイトがあまりない印象ですが、VINE LINUX(RPM系)の下記ドキュメントは詳しいです。
alternatives による標準コマンドの切り替え
#作業メモ的なもの
###JDKをダウンロード
Oracleのサイトから落とします。
wgetで取ってきたい場合は上記の参考URLに書いてある方法が良さげです(試してないけど)。
私はホストOS(Windows10pro)でダウンロードして、ゲストOS(linux)へWinSCPでアップしました。
キャプチャを参考にダウンロードします。
Oracle Technology Network/Java/Java SE/Downloads
ライセンス条項に許諾のチェックを入れて該当のファイルをクリックします。
今回は jdk-9.0.1_linux-x64_bin.rpm
と jdk-8u152-linux-x64.rpm
をダウンロードしました。
###JDKインストール
rootで作業しました。
rpmファイルは/root直下に置きました。
[root@asianux7 ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg jdk-8u152-linux-x64.rpm jdk-9.0.1_linux-x64_bin.rpm
rpmコマンドに -i
を付けてファイル名を指定してインストールします。
[root@asianux7 ~]# rpm -ihv /root/jdk-9.0.1_linux-x64_bin.rpm
準備しています... ################################# [100%]
更新中 / インストール中...
1:jdk-9.0.1-2000:9.0.1-ga ################################# [100%]
Unpacking JAR files...
plugin.jar...
javaws.jar...
deploy.jar...
[root@asianux7 ~]# rpm -ihv /root/jdk-8u152-linux-x64.rpm
準備しています... ################################# [100%]
更新中 / インストール中...
1:jdk1.8-2000:1.8.0_152-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
両バージョンのJDKディレクトリができています。
[root@asianux7 ~]# ls /usr/java/
default/ jdk-9.0.1/ jdk1.8.0_152/ latest/
###alternativesへjavaを登録
alternativesで切り替えできるようにjavaの各バージョンを登録します。末尾の1,2が優先順位です。
今回はjava9を1位にしました。
この順位はautoモードの場合に意味を持ちます。
手動モードの場合は指定したバージョンが現在のバージョンになります。
[root@asianux7 ~]# alternatives --install /usr/bin/java java /usr/java/jdk-9.0.1/bin/java 1
[root@asianux7 ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_152/bin/java 2
alternativesに登録されているjavaバージョンのリストと現在のjavaバージョンを確認します。
+
が付いているバージョンが現在のバージョンです。
[root@asianux7 ~]# alternatives --config java
5 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
1 java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151-2.6.11.1.el7_4.x86_64/jre/bin/java)
* 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java)
+ 3 /usr/java/jdk-9.0.1/bin/java
4 /usr/java/jdk1.8.0_152/jre/bin/java
5 /usr/java/jdk1.8.0_152/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
[root@asianux7 ~]# java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
使う予定のない原住民(openjdk)とjreをalternativesのリストから削除します。
[root@asianux7 ~]# alternatives --remove java /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151-2.6.11.1.el7_4.x86_64/jre/bin/java
[root@asianux7 ~]# alternatives --remove java /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java
[root@asianux7 ~]# alternatives --remove java /usr/java/jdk1.8.0_152/jre/bin/java
すっきりしました。
[root@asianux7 ~]# alternatives --config java
2 プログラムがあり 'java' を提供します。
選択 コマンド
-----------------------------------------------
* 1 /usr/java/jdk1.8.0_152/bin/java
+ 2 /usr/java/jdk-9.0.1/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
###java_homeの切り替え
java_homeもjava9系とjava8系で切り替えられるようにします。
[root@asianux7 ~]# alternatives --install /usr/local/java_home java_home /usr/java/jdk-9.0.1 1
[root@asianux7 ~]# alternatives --install /usr/local/java_home java_home /usr/java/jdk1.8.0_152 2
[root@asianux7 ~]# alternatives --config java_home
2 プログラムがあり 'java_home' を提供します。
選択 コマンド
-----------------------------------------------
1 /usr/java/jdk-9.0.1
*+ 2 /usr/java/jdk1.8.0_152
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
java_homeができているか確認します。
[root@asianux7 ~]# ls /usr/local/java_home/
COPYRIGHT README.html THIRDPARTYLICENSEREADME.txt db javafx-src.zip lib release
LICENSE THIRDPARTYLICENSEREADME-JAVAFX.txt bin include jre man src.zip
[root@asianux7 ~]# /usr/local/java_home/bin/java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
java_homeのjavaのバージョンが 1.8.0
になっているのでバージョンを切り替えます。
[root@asianux7 ~]# alternatives --config java_home
2 プログラムがあり 'java_home' を提供します。
選択 コマンド
-----------------------------------------------
1 /usr/java/jdk-9.0.1
*+ 2 /usr/java/jdk1.8.0_152
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1 ←※`1`を指定
java_homeのjavaのバージョンが 9.0.1
になっていることを確認します。
[root@asianux7 ~]# alternatives --config java_home
2 プログラムがあり 'java_home' を提供します。
選択 コマンド
-----------------------------------------------
+ 1 /usr/java/jdk-9.0.1
* 2 /usr/java/jdk1.8.0_152
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
[root@asianux7 ~]# /usr/local/java_home/bin/java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
必要に応じて JAVA_HOME環境変数を/etc/profile.d/
に登録します。
[root@asianux7 ~]# echo 'export JAVA_HOME=/usr/local/java_home' >> /etc/profile.d/jdk.sh
#おわりに
alternativesコマンドはjava専用ではなく汎用的なものなので、機会があれば他のソフトでも試してみたいと思います。