CentOS7系+JDK-9.0.1+JDK1.8.0+alternativesで切り替え 

#はじめに
###環境
- 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のバージョン管理](http://www.task-notes.com/entry/20150530/1432954800)

alternativesについて詳しい説明があるサイトがあまりない印象ですが、VINE LINUX(RPM系）の下記ドキュメントは詳しいです。
[alternatives による標準コマンドの切り替え](https://vinelinux.org/docs/vine6/cui-guide/update-alternatives.html)

#作業メモ的なもの

###JDKをダウンロード
Oracleのサイトから落とします。
wgetで取ってきたい場合は上記の参考URLに書いてある方法が良さげです（試してないけど）。
私はホストOS(Windows10pro）でダウンロードして、ゲストOS(linux)へWinSCPでアップしました。

キャプチャを参考にダウンロードします。
[Oracle Technology Network/Java/Java SE/Downloads](http://www.oracle.com/technetwork/java/javase/downloads/index.html)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223690/be7ea6e7-89be-c0cc-8020-f80a4fa36dc8.png)

ライセンス条項に許諾のチェックを入れて該当のファイルをクリックします。
今回は `jdk-9.0.1_linux-x64_bin.rpm` と　`jdk-8u152-linux-x64.rpm` をダウンロードしました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223690/f3bf77e0-21cd-1658-bf0c-e5638ef473d3.png)

###JDKインストール
rootで作業しました。
rpmファイルは/root直下に置きました。

```:rpmファイル確認
[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` を付けてファイル名を指定してインストールします。

```:JDK-9.0.1インストール
[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...

```

```:JDK1.8.0インストール
[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モードの場合に意味を持ちます。
手動モードの場合は指定したバージョンが現在のバージョンになります。

```:alternatives登録
[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のリストから削除します。

```:openjdk、jreをリストから削除
[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ができているか確認します。

```: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` になっているのでバージョンを切り替えます。

```:java_homeのバージョン切替
[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` になっていることを確認します。

```:java_homeのjavaのバージョンの確認
[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/` に登録します。

```:JAVA_HOME環境変数
[root@asianux7 ~]# echo 'export JAVA_HOME=/usr/local/java_home' >> /etc/profile.d/jdk.sh

```

#おわりに

alternativesコマンドはjava専用ではなく汎用的なものなので、機会があれば他のソフトでも試してみたいと思います。