Ubuntu に OracleJDK 1.6 (sun-java6) を入れる

Ubuntu では、何も考えず apt で JREJDK を入れると OpenJDK を入れられてしまうのですが、 Java6 時点での OpenJDK は OracleJDK と挙動がかなり異なるため、しばしば問題になることがあります。

筆者は Windows や MacOSX を利用して開発した Android アプリケーションを、 Ubuntu 上の Jenkins で CI しようとした際に、アプリケーションがビルドできずに困ってしまい、その原因が OpenJDK にあるということを突き止めました。

ところで、 Ubuntu で OracleJDK をインストールする方法を検索すると、以下のような apt を使う方法が見つかりますが、現状はこの方法を利用することが出来ません。

sudo add-apt-repository 'deb http://archive.canonical.com/ lucid partner'
sudo apt-get update 
sudo aptitude install sun-java6-jdk

Oracle のサイトから Java に必要なパッケージ類をダウンロードし、手動でインストールする方法をメモしておこうと思います。

手動で OracleJDK1.6 をインストールする

まず必要なファイルをダウンロードします。以下のページから必要な JDK を選択し、遷移先のページで Linux 用のインストールバイナリ (rpm では無い方) をダウンロードします。

mkdir /tmp/sun-java6
cd /tmp/sun-java6
wget {ORACLE_JDK_DOWNLOAD_LINK}

筆者は jdk-6u38-linux-x64.bin をダウンロードしました。このバイナリを実行すると自動的にアーカイブの伸張が行なわれます。

chmod +x jdk-6u38-linux-x64.bin
./jdk-6u38-linux-x64.bin

最後に以下のようなダイアログが表示されるので、 URL 先を読んだ上で Enter を押しましょう。

For more information on what data Registration collects and 
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....

すると同じディレクトリ内に jdk1.6.0_38 というディレクトリが生成されているはずですので、こちらを jvm ディレクトリにコピーしましょう。

sudo cp -a ./jdk1.6.0_38 /usr/lib/jvm
sudo chown -R root:root /usr/lib/jvm/jdk1.6.0_38
sudo ln -s /usr/lib/jvm/jdk1.6.0_38 /usr/lib/jvm/java-6-oracle

alternatives に登録することでシステム側で Java を切り替えることが出来ますので、各コマンドを登録します。

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_38/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_38/bin/javac 1
sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_38/bin/javaws 1
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_38/bin/jar 1
sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_38/bin/javadoc 1
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_38/bin/javap 1
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.6.0_38/bin/javah 1
sudo update-alternatives --install /usr/bin/jdb jdb /usr/lib/jvm/jdk1.6.0_38/bin/jdb 1

以下のコマンドで登録した alternatives を手動で切り替えることが出来ます。

sudo update-alternatives --config java

先程入れた java を選択します (筆者の環境では 2 を選ぶことで変更できました) 。

残りのコマンドも同様に選択します。

sudo update-alternatives --config javac
sudo update-alternatives --config javaws
sudo update-alternatives --config jar
sudo update-alternatives --config javadoc
sudo update-alternatives --config javap
sudo update-alternatives --config javah
sudo update-alternatives --config jdb

最後に -version を確認することで正しく変更できているか確認します。

java -version

以下のように OpenJDK では無く Java(TM) が表示されれば Oracle Java を利用することが出来ています。

java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)

関連記事

JDK を切り替えることになるので、以下のエントリで設定した日本語フォントを再度インストールする必要があります。

参考文献