Ubuntu 12.04 LTS に Java (Oracle JDK) をインストールする

環境: Ubuntu 12.04 LTS (32bit)

Java インストール

Ubuntuの初期状態にはJavaがインストールされていない。 また、インストールできるパッケージにはOracleのものが用意されていない。

$ java
The program 'java' can be found in the following packages:
 * default-jre
 * gcj-4.6-jre-headless
 * openjdk-6-jre-headless
 * gcj-4.5-jre-headless
 * openjdk-7-jre-headless
Try: sudo apt-get install <selected package>

OracleJavaがインストールできるようにする。この後インストール予定のCDH4がOracleのJDK6に依存しているので今回はJDK6を選択。

sudo apt-get update
sudo apt-get install -y python-software-properties

sudo add-apt-repository ppa:webupd8team/java
// Enterを押す

sudo apt-get update
sudo apt-get install -y oracle-java6-installer
// Oracleのライセンス条項に同意するか聞かれるので<Yes>を選択

JDK7、JDK8をインストールする場合

sudo apt-get install -y oracle-java7-installer
sudo apt-get install -y oracle-java8-installer

update-alternatives 設定

update-alternatives を使ってインストールした複数バージョンの Java を簡単に切り替えられるようにする。

インストールされているバージョンの確認

$ update-java-alternatives -l
java-6-oracle 1 /usr/lib/jvm/java-6-oracle
java-7-oracle 2 /usr/lib/jvm/java-7-oracle
java-8-oracle 3 /usr/lib/jvm/java-8-oracle

java7 に切り替え

$ sudo update-java-alternatives -s java-7-oracle

確認

$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM (build 24.45-b08, mixed mode)

java コマンドのパス確認

$ which java
/usr/bin/java

$ ls -l /usr/bin/java
/usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java

$ readlink -f /usr/bin/java
/usr/lib/jvm/java-7-oracle/jre/bin/java

javac コマンドのパス確認

$ which javac
/usr/bin/javac

$ ls -l /usr/bin/java
/usr/bin/java -> /etc/alternatives/java

$ ls -l /etc/alternatives/javac
/etc/alternatives/javac -> /usr/lib/jvm/java-7-oracle/bin/javac

$ readlink -f /usr/bin/javac
/usr/lib/jvm/java-7-oracle/bin/javac

両方とも/usr/lib/jvm/java-7-oracle/bin配下を参照してると思ったが javaコマンドの方は非公開 jre 配下の方を参照している。なぜだろう?

java6 に戻す

$ sudo update-java-alternatives -s java-6-oracle

確認

$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode)

$ ls -l /etc/alternatives/java
/etc/alternatives/java -> /usr/lib/jvm/java-6-oracle/jre/bin/java

JAVA_HOME、PATHの設定

.profile環境変数JAVA_HOMEPATHを追加する。

JAVA_HOME/usr/lib/jvm/java-6-oracleというように固定パスを書いてしまうと update-alternatives での切り替えが反映されなくなってしまうので以下のように設定する。

echo 'JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' >> ~/.profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.profile
source ~/.profile

sed/usr/lib/jvm/java-6-oracle/bin/javac/usr/lib/jvm/java-6-oracleに書き換えている。

参考:
http://serverfault.com/questions/143786/how-to-determine-java-home-on-debian-ubuntu