Jenkins が古い Java JDK を参照するせいで起動しなくなった

CentOS 5.2 で発生した不具合。Jenkins を最新版 (1.502)にアップデートしたら起動できなくなりました。

# service jenkins start
Starting Jenkins Jenkins requires Java5 or later, but you are running 1.4.2 from /usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre
java.lang.UnsupportedClassVersionError: 48.0
   at Main.main(Main.java:90)
                                                           [  OK  ]
(OK と出るが起動せず)

JDK 1.6.0 がインストールされているにも関わらず、なぜか CentOS デフォルトの 1.4.2 を見に行っています。

修正方法をメモしておきます。

OS がどの JDK を参照しているのかは、 update-alternatives -display java コマンドで確認することができます。

叩いてみると、やはり古い JDK を参照していました。

# update-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 です。

これを最新版に切り替えたいのですが、私は手動で JDK 1.6.0 をインストールしたせいで、update-alternatives に認識されていませんでした。

-config java オプションで確認してみると、JDK 1.4.2 しか表示されません。

# update-alternatives --config java

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

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java

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

というわけで、JDK 1.6.0_32 のパスを追加して、リンクを書きなおしてやります。

以下のコマンドでリンクを追加することができます。

# update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_32/bin/java 16032

これでOKです。

再び update-alternatives -config java コマンドでリンクの書き換えが成功してしていることを確かめられます。

# update-alternatives --config java

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

  選択       コマンド
-----------------------------------------------
   1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
*+ 2           /usr/java/jdk1.6.0_32/bin/java

以上で Jenkins が起動するようになりました。

# service jenkins start
Starting Jenkins                                           [  OK  ]

参考