現在制作中のアプリの本番環境としてHerokuを利用しており、Vagrantによって仮想開発環境を構築しています。HerokuもVagrant-Herokuも、ビルトインされているJDKのバージョンは6ですが、これを7にアップグレードしようと試みましたが、困難だったのでメモ。

Heroku JDK Settings

java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.4) (Ubuntu build 1.6.0_27-b27)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
java version "1.7.0_45"
OpenJDK Runtime Environment (IcedTea 2.4.3) (Ubuntu build 1.7.0_45-b31)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

Herokuはsystem.propertiesにjava.runtime.version=1.7と記入するだけでJDK7が利用できます。このときのバージョンはOpenJDK7u45です。
Vagrant-Herokuに対して試みたことは以下のとおり。結論から言えばOracleJDK7u60をインストールすることでお茶を濁しました。
1. OpenJDKをインストール
1. apt-getでインストール:失敗
1. OracleJDKをインストール
1. OracleのJDKアーカイブからダウンロードして展開、インストール:失敗
1. oracle-java7-installerを利用してOracleJDK7u60を導入する:成功

失敗事例

apt-getでインストール:失敗

# 通常の方法

sudo apt-get install openjdk-7-jdkとやるのが通常の方法です。しかし なにもおこらない。見つからないらしい。

$ sudo apt-get install openjdk-7-jdk
Reading package lists... Done
Building dependency tree      
Reading state information... Done
E: Couldn't find package openjdk-7-jdk

apt-cache search openjdkでは発見されないが、sudoをつけてsudo apt-cache search openjdkと打つと発見されるので、何かの間違いではないだろうかと思うが、ないものはない。

sudo apt-cache search openjdk
default-jdk - Standard Java or Java compatible Development Kit
default-jdk-doc - Standard Java or Java compatible Development Kit (documentation)
default-jre - Standard Java or Java compatible Runtime
default-jre-headless - Standard Java or Java compatible Runtime (headless)
freemind - Java Program for creating and viewing Mindmaps
icedtea-6-jre-cacao - Alternative JVM for OpenJDK, using Cacao
icedtea-6-plugin - web browser plugin based on OpenJDK and IcedTea to execute Java applets
openjdk-6-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-6-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-6-doc - OpenJDK Development Kit (JDK) documentation
openjdk-6-jdk - OpenJDK Development Kit (JDK)
openjdk-6-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-6-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-6-jre-lib - OpenJDK Java runtime (architecture independent libraries)
openjdk-6-source - OpenJDK Development Kit (JDK) source files
openjdk-6-jre-zero - Alternative JVM for OpenJDK, using Zero/Shark
<a href="http://openoffice.org">openoffice.org</a> - office productivity suite
openjdk-7-doc - OpenJDK Development Kit (JDK) documentation
openjdk-7-jre-lib - OpenJDK Java runtime (architecture independent libraries)
openjdk-7-source - OpenJDK Development Kit (JDK) source files
openjdk-7-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-7-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-7-jdk - OpenJDK Development Kit (JDK)
openjdk-7-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-7-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
cacao-source - Source for CACAO, a Java virtual machine
oracle-java7-installer - Oracle Java(TM) Development Kit (JDK) 7
oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6
oracle-java8-installer - Oracle Java(TM) Development Kit (JDK) 8

jdk problems after upgrade
http://ubuntuforums.org/showthread.php?t=1919487

# ソースリストを追加

こちらを参考に。

OpenJDK 7 Installation trouble on 10.04 [closed]
http://askubuntu.com/questions/420910/openjdk-7-installation-trouble-on-10-04

echo "deb <a href="http://archive.canonical.com/ubuntu" style="font-family: Tahoma; font-size: 14px;">http://archive.canonical.com/ubuntu</a> oneiric partner" >> /etc/apt/sources.list
echo "deb-src <a href="http://archive.canonical.com/ubuntu">http://archive.canonical.com/ubuntu</a> oneiric partner" >> /etc/apt/sources.list

あるいはコレもダメでした

echo "deb <a href="http://ppa.launchpad.net/openjdk/ppa/ubuntu">ppa.launchpad.net/openjdk/ppa/ubuntu</a> lucid main" >> /etc/apt/sources.list

echo "deb-src <a href="http://ppa.launchpad.net/openjdk/ppa/ubuntu">ppa.launchpad.net/openjdk/ppa/ubuntu</a> lucid main" >> /etc/apt/sources.list

sudo add-apt-repository ppa:openjdk/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk

How to get OpenJDK 7?
http://ubuntuforums.org/showthread.php?t=1701131

sudo add-apt-repository ppa:openjdk/ppa
apt-get update
apt-get install openjdk-7

しかし、いろいろ触ってもエラーは変わらず。
これも参考になるのかもしれない。
Dependencies problems installing openjdk on Ubuntu
http://superuser.com/questions/478284/dependencies-problems-installing-openjdk-on-ubuntu
そもそも、Vagrant-Herokuでは、apt-getからはJDK7を導入できませんでした。

Ubuntu 12.10用のリポジトリを利用して10.04にOpenJDKをインストールするというトリッキーな技を繰り出す人もいます。
open jdk 7 for ubuntu 10.04 from quantal repo

http://stackoverflow.com/questions/15197578/open-jdk-7-for-ubuntu-10-04-from-quantal-repo

OracleのJDKアーカイブサイトからダウンロード、展開、インストール:失敗

展開できませんでした。というのも、tar.gzを展開しようにもテキストファイルとして認識されてしまうのです。
やり方はこちらに詳しい。
How to automate download and installation of Java JDK on Linux?

http://stackoverflow.com/questions/10268583/how-to-automate-download-and-installation-of-java-jdk-on-linux

$ wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" <a href="http://download.oracle.com/otn/java/jdk/7u45-b18/jre-7u45-linux-x64.tar.gz" style="font-size: 13px;">http://download.oracle.com/otn/java/jdk/7u45-b18/jre-7u45-linux-x64.tar.gz</a>
$ tar zxvf jdk-7u45-linux-x64.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Exiting with failure status due to previous errors

$ file jdk-7u45-linux-x64.tar
jdk-7u45-linux-x64.tar: ASCII C++ program text

アーカイブ:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
これはちょっと修復不可能なんじないか、と言っているのが下の記事。個人的には納得した。とはいえ、それでは先のStackOverflowで「出来た!」といっている人たちについて疑問が残る。

Repair corrupted binary files transfered via ftp in ASCII mode
http://blog.deepcore.gr/?p=177

成功事例

oracle-java7-installerを利用してOracleJDK7u60を導入する

ただしoracle-java7-installerは対話式ですので、シェルスクリプトで利用するには一工夫必要です。

Auto yes to the License Agreement on sudo apt-get -y install oracle-java7-installer

http://stackoverflow.com/questions/19275856/auto-yes-to-the-license-agreement-on-sudo-apt-get-y-install-oracle-java7-instal
INSTALL ORACLE JAVA 7 IN UBUNTU VIA PPA REPOSITORY
http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html


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

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
sudo apt-get -y install oracle-java7-installer 

add-apt-repositoryに-yオプションは不要でした。

$ vagrant@heroku:/app$ java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

ということで完成。なかなかしんどい戦いでした。

ちなみに、oracle-java7-installerには、過去のバージョン(7u45等)は存在しませんので、残念ながらインストールできません。

$ sudo apt-get -y install apt-show-versions
$ sudo apt-show-versions oracle-java7-installer
oracle-java7-installer/lucid uptodate 7u60-0~webupd8~0

http://www.ubuntuupdates.org/pm/oracle-jdk7-installer

また、今になってこのような表示が出てきましたが、今後の参考にとどめておきます。

$ sudo apt-get install openjdk-7-jdk
Reading package lists... Done
Building dependency tree      
Reading state information... Done
Package openjdk-7-jdk is a virtual package provided by:
  oracle-java8-installer 8u5-1~webupd8~3
  oracle-java7-installer 7u60-0~webupd8~0
You should explicitly select one to install.
E: Package openjdk-7-jdk has no installation candidate

追記

HerokuにはIced-Tea Pluginが入っているので、これもインストールしておくとよいと思います。

sudo apt-get install icedtea-plugin

How do I install Java?
http://askubuntu.com/questions/48468/how-do-i-install-java