14 March 2009

(Linux) RHELのGNU JavaからSunのJavaに切り替える

CentOS 5.2 (RHEL 5.2相当)で、標準でインストールされているJRE(GNU Java)は、SunのJavaと完全互換性が無いので、動作しないアプリケーションがある。

一時的にSunのJREを用いるようにシステム設定を変更する方法。

まず、現在のjavaコマンドで起動するJREを知っておく

[root@localhost ~]# java --version java version "1.4.2" gij (GNU libgcj) version 4.1.2 20071124 (Red Hat 4.1.2-42) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. [root@localhost ~]# which java /usr/bin/java

また、rpmパッケージ管理システムでインストールされているGNU javaとSun javaのパッケージ名等の情報を得ておく。

[root@localhost ~]# rpm -qa | grep java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 [root@localhost ~]# rpm -qa | grep jre jre-1.6.0_12-fcs [root@localhost ~]# rpm -q -l jre | grep \/bin\/java /usr/java/jre1.6.0_12/bin/java ← 実行ファイルの場所 /usr/java/jre1.6.0_12/bin/java_vm /usr/java/jre1.6.0_12/bin/javaws

Linuxのシンボル管理ソフトalternativesでの設定状況を確認する。

[root@localhost ~]# alternatives --display java java -ステータスは自動です。 リンクは現在 /usr/lib/jvm/jre-1.4.2-gcj/bin/java を指しています。 /usr/lib/jvm/jre-1.4.2-gcj/bin/java - 優先項目 1420 スレーブ jre: /usr/lib/jvm/jre-1.4.2-gcj スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.4.2-gcj スレーブ keytool: /usr/lib/jvm/jre-1.4.2-gcj/bin/keytool スレーブ rmiregistry: /usr/lib/jvm/jre-1.4.2-gcj/bin/rmiregistry 現在の「最適」バージョンは /usr/lib/jvm/jre-1.4.2-gcj/bin/java です。

SunのJREを、alternativesコマンドで選択肢に加える処理をする。
(priority = 200 は、てきとうな値を入れておけばよい)

[root@localhost ~]# alternatives --install /usr/bin/java java /usr/java/jre1.6.0_12/bin/java 200

シンボリックリンクを、Sun JREに変更して、変更状況を確認する。

[root@localhost ~]# alternatives --config java 2 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java 2 /usr/java/jre1.6.0_12/bin/java ← こちらに切り替える Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2 [root@localhost ~]# java -version java version "1.6.0_12" Java(TM) SE Runtime Environment (build 1.6.0_12-b04) Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

先日、とある企業のシステム構築しているSEが、「そんなの /usr/bin/javaのシンボリックリンクを無理矢理書き換えていますよ…」と言っていたが、もうちょっとLinuxを勉強しろよと思った… (後を引き継いだSEは大変だろうね)