One IT Thing

IT業界で飯を食う為の学習系雑記

java

CentOS7にOpenJDK11をインストール、alternatives後の再ログインでJAVA_HOMEも自動変更

投稿日:2019年7月23日 更新日:

OpenJDKはCentOS-Baseリポジトリのupdatesに登録されているので新規yumリポジトリ追加は不要です。

[root@spock tmp]# yumdb search from_repo updates | grep openjdk | grep 11
1:java-11-openjdk-11.0.3.7-0.el7_6.x86_64
1:java-11-openjdk-devel-11.0.3.7-0.el7_6.x86_64
1:java-11-openjdk-headless-11.0.3.7-0.el7_6.x86_64

環境

CentOS 7.6

[root@spock ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

openjdk11インストール

yum install java-11-openjdk-devel。

[root@spock ~]$ yum install java-11-openjdk-devel
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                 | 7.4 kB  00:00:00
 * base: ftp.iij.ad.jp
 * epel: mirror.horizon.vn
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                                                                 | 3.6 kB  00:00:00
docker-ce-stable                                                                                                     | 3.5 kB  00:00:00
epel                                                                                                                 | 5.3 kB  00:00:00
extras                                                                                                               | 3.4 kB  00:00:00
updates                                                                                                              | 3.4 kB  00:00:00
(1/2): epel/x86_64/updateinfo                                                                                        | 994 kB  00:00:00
(2/2): epel/x86_64/primary_db                                                                                        | 6.8 MB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ java-11-openjdk-devel.x86_64 1:11.0.3.7-0.el7_6 を インストール
--> 依存性の処理をしています: java-11-openjdk(x86-64) = 1:11.0.3.7-0.el7_6 のパッケージ: 1:java-11-openjdk-devel-11.0.3.7-0.el7_6.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ java-11-openjdk.x86_64 1:11.0.3.7-0.el7_6 を インストール
--> 依存性の処理をしています: java-11-openjdk-headless(x86-64) = 1:11.0.3.7-0.el7_6 のパッケージ: 1:java-11-openjdk-11.0.3.7-0.el7_6.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ java-11-openjdk-headless.x86_64 1:11.0.3.7-0.el7_6 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

============================================================================================================================================
 Package                                    アーキテクチャー         バージョン                             リポジトリー               容量
============================================================================================================================================
インストール中:
 java-11-openjdk-devel                      x86_64                   1:11.0.3.7-0.el7_6                     updates                   3.3 M
依存性関連でのインストールをします:
 java-11-openjdk                            x86_64                   1:11.0.3.7-0.el7_6                     updates                   194 k
 java-11-openjdk-headless                   x86_64                   1:11.0.3.7-0.el7_6                     updates                    38 M

トランザクションの要約
============================================================================================================================================
インストール  1 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 42 M
インストール容量: 165 M
Is this ok [y/d/N]: Y
Downloading packages:
(1/3): java-11-openjdk-11.0.3.7-0.el7_6.x86_64.rpm                                                                   | 194 kB  00:00:00
(2/3): java-11-openjdk-devel-11.0.3.7-0.el7_6.x86_64.rpm                                                             | 3.3 MB  00:00:00
(3/3): java-11-openjdk-headless-11.0.3.7-0.el7_6.x86_64.rpm                                                          |  38 MB  00:00:00
--------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                         45 MB/s |  42 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:java-11-openjdk-headless-11.0.3.7-0.el7_6.x86_64                                                          1/3
  インストール中          : 1:java-11-openjdk-11.0.3.7-0.el7_6.x86_64                                                                   2/3
  インストール中          : 1:java-11-openjdk-devel-11.0.3.7-0.el7_6.x86_64                                                             3/3
  検証中                  : 1:java-11-openjdk-devel-11.0.3.7-0.el7_6.x86_64                                                             1/3
  検証中                  : 1:java-11-openjdk-11.0.3.7-0.el7_6.x86_64                                                                   2/3
  検証中                  : 1:java-11-openjdk-headless-11.0.3.7-0.el7_6.x86_64                                                          3/3

インストール:
  java-11-openjdk-devel.x86_64 1:11.0.3.7-0.el7_6

依存性関連をインストールしました:
  java-11-openjdk.x86_64 1:11.0.3.7-0.el7_6                        java-11-openjdk-headless.x86_64 1:11.0.3.7-0.el7_6

完了しました!

JDKバージョン切り替え

CentOS7はデフォルトでOpenJDK8がインストールされている為、alternativesコマンドで11に切り替えます。シンボリックリンクの/bin/java他が変更されたJDKのjavaコマンドを参照するようになります。

[root@spock ~]# alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre/bin/java)
   2           java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.3.7-0.el7_6.x86_64/bin/java)

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

JAVA_HOME環境変数を設定

TomcatやOpenGrokなど$JAVA_HOMEが設定されていることを期待しているミドルの為に設定。

alternativesコマンドでJDKルートが変わってしまうので動的に設定されるようにします。alternativesは/bin/javaをシンボリックリンクとして置き換えるのでreadlinkコマンドを使ってリンク元を割り出します。

再帰的にリンクが貼られているのでヒットするまでreadlinkを繰り返し。

[root@spock ~]# which java
/bin/java

[root@spock ~]# readlink $(which java)
/etc/alternatives/java

[root@spock ~]# readlink $(readlink $(which java))
/usr/lib/jvm/java-11-openjdk-11.0.3.7-0.el7_6.x86_64/bin/java

[root@spock ~]# dirname $(readlink $(readlink $(which java)))
/usr/lib/jvm/java-11-openjdk-11.0.3.7-0.el7_6.x86_64/bin

[root@spock ~]# dirname $(dirname $(readlink $(readlink $(which java))))
/usr/lib/jvm/java-11-openjdk-11.0.3.7-0.el7_6.x86_64

binが見つかったら最後にdirnameコマンドでbinの親ディレクトリを特定します。JDKのホームディレクトリがコマンドから割り出せるようになりました。

readlinkは-eで再帰出来るので最後のコマンドは以下と同義になり、ちょっとだけ短くできます。

[root@spock ~]# dirname $(dirname $(readlink -e $(which java)))
/usr/lib/jvm/java-11-openjdk-11.0.3.7-0.el7_6.x86_64

全ユーザログイン時にJAVA_HOME環境変数を適用させる。alternativesが/binにリンクを張ってくれるけど一応binをPATHに追加。

vi /etc/profile.d/java.sh

# 以下の内容を記述して保存
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=${PATH}:${JAVA_HOME}/bin

ログインし直すか、source /etc/profile.d/java.shを実行して$JAVA_HOMEを読み込みます。

動作確認

[root@spock tmp]# vi HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
        System.out.println(System.getProperty("java.version"));
    }
}

[root@spock tmp]# javac HelloWorld.java

[root@spock tmp]# ls
HelloWorld.class  HelloWorld.java

[root@spock tmp]# java HelloWorld
Hello World!
11.0.3

留意点

alternatives直後、javaのバージョンは切り替わりますがJAVA_HOME切り替えは要ログイン。

-java
-,

執筆者:

関連記事

IPAmj明朝のttfファイルをJVMに読み込ませてSwingで表示(要Java11)

目次1 はじめに2 Java11でSwingがIVSを認識するようになった3 Java Swingソース4 動作確認4.1 Java 8(1.8.0_202)で実行4.2 Java 11(11.0.2 …

JavaコアAPI数の遷移をChart.jsでグラフ化

Javaはデフォルトで多数のAPIクラスを持っていてコーディングを楽にしてくれます。その数は増え続けているんでしょうか。 バージョンが上がるごとにどう変化しているか調べてchart.jsでグラフ化しま …

SpringBootアプリにBootstrap4を追加(WebJars使用)

SpringBootにCSSやJSを追加する場合は概ね以下のパターンがあるんじゃないかと思います。(bowerはもう使わない方向で) CDNで外部から読み込む<script src=&#8221 …

Tomcat9をCentOS7&OpenJDK11で起動

CentOS 7.6にOpenJDK 11を以下の記事で入れている状態です。 One IT ThingCentOS7にOpenJDK11をインストール、alternatives後の再ログイン …

Spring&JSPの検証環境を速攻で作る

2019年現在、オワコン風潮の強いJSPですが使っているプロジェクトもまだまだあり、枯れた技術を好む官公庁系のプロジェクトでは根強いシェアを誇っています。実装検証をする為に環境を作る機会があったりする …

 

shingo.7k24
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。