mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

CentOS - Java インストール!

[ プログラミング ] [ CentOS, Java ]

こんばんは。

CentOS 6.2 にはデフォルトで GNU 版の Java が用意されていますが、Oracle 版の Java をインストールして使用可能にする設定をしました。

CentOS への Java のインストールについての情報は結構ありますが、インストールしただけでは GNU 版の Java が有効になったままで Oracle 版の Java が使えません。

作業記録

0. 前提条件

  • CentOS 6.2 (i386) での作業を想定。
  • GNU 版 Java が導入済みでなければ、Java の新規インストールだけで済む。
  • GNU 版 Java でよいのなら、Java の新規インストールもしなくてよい。

1. GNU 版 Java の確認

GNU 版 Java が導入済みか否かの確認をする。

1
2
3
# rpm -qa | grep gcj
java-1.5.0-gcj-1.5.0.0-29.1.el6.i686
libgcj-4.4.6-3.el6.i686

GCJ(The GNU Compiler for Java) が導入済みなのがわかる。

2. Oracle 版 Java アーカイブの準備

Java SE Downloads から “jdk-7u5-linux-i586.rpm"(当記事執筆時点で最新)をダウンロードして適当な場所に置く。

3. Oracle 版 Java のインストール

以下のコマンドでインストールする。

1
# rpm -Uvh jdk-7u5-linux-i586.rpm

以下のコマンドでインストールされたか確認する。

1
2
# rpm -qa | grep jdk
jdk-1.7.0_05-fcs.i586

4. Java のバージョン確認

使用可能な Java のバージョンを確認してみる。

1
2
3
4
5
6
7
# java -version
java version "1.5.0"
gij (GNU libgcj) version 4.4.6 20110731 (Red Hat 4.4.6-3)

Copyright (C) 2007 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.

GNU 版の Java が有効になっていて、独自にインストールした JDK が有効になっていないことが分かる。

5. alternatives で確認

同時にインストールされた同機能を提供するソフトやバージョンの異なるソフトを管理するためのユーティリティ alternatives を使って Java について確認してみる。

1
2
3
4
5
6
7
8
9
# alternatives --display java
java - ステータスは手動です。
リンクは現在 /usr/lib/jvm/jre-1.5.0-gcj/bin/java を指しています。
/usr/lib/jvm/jre-1.5.0-gcj/bin/java - 優先項目 1500
 スレーブ keytool: /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.5.0-gcj
 スレーブ jre: /usr/lib/jvm/jre-1.5.0-gcj
現在の「最適」バージョンは /usr/lib/jvm/jre-1.5.0-gcj/bin/java です。

alternatives には GNU 版の Java しか登録されていないことが分かる。

6. alternatives に追加

alternatives に独自にインストールした JDK を追加する。 優先項目の値は大きいほど優先度が上がるので、既存の 1.5.0 が 1500 になっているのに合わせて、1700 とした。

1
# alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_05/bin/java 1700

alternatives についての詳細は “–help” でご確認ください。

7. alternatives で再度確認

alternatives を使って Java について確認してみる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# alternatives --display java
java -ステータスは自動です。
リンクは現在 /usr/java/jdk1.7.0_05/bin/java を指しています。
/usr/lib/jvm/jre-1.5.0-gcj/bin/java - 優先項目 1500
 スレーブ keytool: /usr/lib/jvm/jre-1.5.0-gcj/bin/keytool
 スレーブ rmiregistry: /usr/lib/jvm/jre-1.5.0-gcj/bin/rmiregistry
 スレーブ jre_exports: /usr/lib/jvm-exports/jre-1.5.0-gcj
 スレーブ jre: /usr/lib/jvm/jre-1.5.0-gcj
/usr/java/jdk1.7.0_05/bin/java - 優先項目 1700
 スレーブ keytool: (null)
 スレーブ rmiregistry: (null)
 スレーブ jre_exports: (null)
 スレーブ jre: (null)
現在の「最適」バージョンは /usr/java/jdk1.7.0_05/bin/java です。

独自にインストールした Java が追加され、さらに「最適」バージョンに設定されたことが分かる。

8. alternatives の設定

どちらの Java を有効にするかを設定する。

1
2
3
4
5
6
7
8
9
10
# alternatives --config java

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

  選択       コマンド
-----------------------------------------------
 + 1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*  2           /usr/java/jdk1.7.0_05/bin/java

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

9. Java バージョンの再確認

使用可能な Java のバージョンを確認してみる。

1
2
3
4
# java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing)

独自にインストールした Java のバージョンが表示された。

10. テストソース作成

コンパイル・実行テスト用のソースを作成する。 【 ファイル名:HelloWorld.java 】

1
2
3
4
5
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

11. コンパイル&実行

以下のようにコンパイル・実行する。

1
2
3
# javac HelloWorld.Java
# java HelloWorld
Hello World

その他

ちなみに、GNU 版の Java が有効のままだと、コンパイルができても実行するとエラーになる。

1
2
3
4
5
6
7
8
9
10
# java HelloWorld
Exception in thread "main" java.lang.ClassFormatError: HelloWorld (unrecognized class file version)
   at java.lang.VMClassLoader.defineClass(libgcj.so.10)
   at java.lang.ClassLoader.defineClass(libgcj.so.10)
   at java.security.SecureClassLoader.defineClass(libgcj.so.10)
   at java.net.URLClassLoader.findClass(libgcj.so.10)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at java.lang.ClassLoader.loadClass(libgcj.so.10)
   at gnu.java.lang.MainThread.run(libgcj.so.10)

以上。

Comments