背景

  • Sunが提供するJavaはソースコードの公開がなされていなかったため、CentOSにはフリーのコンパイラであるGCJ(The GNU Compiler for the Java Programming Language)が搭載されている。
  • GCJについては以下のサイトが詳しい
  • CentOSではGCJでコンパイルすることを前提にしているパッケージが存在するためにGCJを削除することができない。(TomcatやEclipseなど)
  • Javaで開発する際には、Sun(本家)のコンパイラを使用したいため、SunのJDKをインストールするがJavaのコンパイラが混合してしまう。
  • そこで、JPackageを利用して、SunのJavaとGCJを切り替える仕組みを用意する必要がある。

準備

  • JPackageの枠組みでJDKをインストールするのに必要なユーティリティをインストールします。
# yum install jpackage-utils

Sun SDKインストール

  • まずは、ダウンロード。
    • 後にインストールするJPackageが、最新のSDKに対応していない場合があるので注意が必要
    • JPackageの最新は、SDK 6update6をサポートしているみたいだからそれをダウンロード。
    • 古いSDKをダウンロードする場合は、こちらから。
    • 今回は、jdk-6u6-linux-i586-rpm.binを取得
  • インストール
    • 自己解凍形式のシェルなので↓でOK
#sh jdk-6u6-linux-i586-rpm.bin

JPackageインストール

  • つぎにSunのJDKをJPackageの枠組みに組み込むためのパッケージを取得します。
    • 今回は、java-1.6.0-sun-compat-1.6.0.06-1jpp.i586.rpmを取得
  • インストール
#rpm -Uvh java-1.6.0-sun-compat-1.6.0.06-1jpp.i586.rpm

確認

これで、Javaのコンパイラが複数になりました。JPackageで確認してみましょう。

  • javacのバージョン
 [root@server src]# javac -version
 javac 1.6.0_06
  • JPackageで切り替え
 [root@server src]# alternatives --config javac
 
 2 プログラムがあり 'javac' を提供します。
 
   選択       コマンド
 -----------------------------------------------
    1           /usr/lib/jvm/java-1.4.2-gcj/bin/javac
 *+ 2           /usr/lib/jvm/java-1.6.0-sun/bin/javac
 
 Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
  • なんとなく1を選択する。
    • が付いてるものが現在の「最適」で、+が現在選択されているという意味らしい。
  • 変更後のバージョン
 [root@server src]# javac -version
 Eclipse Java Compiler v_677_R32x, 3.2.1 release, Copyright IBM Corp 2000, 2006. All rights reserved.
  • 切り替わった感じだけど、これがjava-1.4.2-gcjのバージョンで良いのか??


もうちょっと確認

  • パスはどうなっているのか?
 [root@server src]# which javac
 /usr/bin/javac
 
 [root@server src]# rpm -qf /usr/bin/javac
 ファイル /usr/bin/javac はどのパッケージにも属していません。
 
 [root@server src]# file /usr/bin/javac
 /usr/bin/javac: symbolic link to `/etc/alternatives/javac'
 
 [root@server src]# ls -l /etc/alternatives/javac
 lrwxrwxrwx 1 root root 37  9月  3 18:44 /etc/alternatives/javac -> /usr/lib/jvm/java-1.4.2-gcj/bin/javac
  • alternativesで切り替えた時に、シムリンクを切り替えてるみたい。
  • 切り替えて使用する場合は、環境変数のJAVA_HOMEの切り替えも必要です。

facebook slideshare rubygems github qiita