Java9

OpenJDK9のビルド

More than 1 year has passed since last update.

OpenJDK9をソースコードからビルドしてみたので、その手順をメモ。

環境

version
OS Ubuntu 15.04 (kernel 3.19.0-39-generic) x86_64
jdk 9-internal (build 9-internal+0-2015-12-15-112158.vagrant.OpenJDK9)

OpenJDK9のビルド

OpenJDKのjdk9リポジトリからmercurialでソースコードを取得し、ビルドする。
なおコードベースにはjavaファイルが含まれているため、そのビルド用にaptからOpenJDK8のバイナリをインストールしておく。

OpenJDK9インストール
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install build-essential -y
$ sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev -y
$ sudo apt-get install libasound2-dev libfreetype6-dev libcups2-dev -y
$ sudo apt-get install zip unzip mercurial -y
$ sudo apt-get install openjdk-8-jdk -y
$ unset JAVA_HOME
$ export LANG=C
$ export PATH="/usr/lib/jvm/java-8-openjdk-amd64/bin:${PATH}"
$ hg clone http://hg.openjdk.java.net/jdk9/jdk9 OpenJDK9
$ cd OpenJDK9/
OpenJDK9$ sh ./get_source.sh
OpenJDK9$ sh ./configure
OpenJDK9$ make all

ネットワーク状況とビルドマシンのスペックによるが、ソースコード取得とビルドには数十分という単位ではなく、数時間という単位で時間がかかるので注意。

ビルド時に遭遇したエラー1

sh ./get_source.shの最中に下記のようなメッセージが表示されていた場合、ソースコード取得に失敗している(ネットワーク環境が良くないと、転送途中でセッションがタイムアウトしてabortするるようだ)。
この場合、全てのリポジトリが正常に取得できるまで、sh ./get_source.shを繰り返せば良い。

                  jdk:   abort: stream ended unexpectedly (got 9616 bytes, expected 12490)
WARNING: jdk exited abnormally (255)

ビルド時に遭遇したエラー2

今回はVagrantで起動した仮想マシン上でビルドをしていたが、メモリ不足でビルド途中でコケた。Vagrantはデフォルトで480MB程度しかメモリを割り当てないので、2GBぐらいメモリを与えたほうが良い。

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 25473024 bytes for committing reserved memory.

ビルド結果

ビルドに成功すると、OpenJDK9/build/linux-x86_64-normal-server-release/images/以下にjdkやjreのディレクトリが作成されている。生成されたjdkディレクトリをJAVA_HOMEに指定すれば、生成されたjavaやjavacを利用することができる。

$ export JAVA_HOME=/home/vagrant/OpenJDK9/build/linux-x86_64-normal-server-release/images/jdk
$ export PATH=$JAVA_HOME/bin:${PATH}
$ java -version
openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2015-12-15-112158.vagrant.OpenJDK9)
OpenJDK 64-Bit Server VM (build 9-internal+0-2015-12-15-112158.vagrant.OpenJDK9, mixed mode)