Hello world! コンテンツ・メディア第1事業部のjyukutyoこと阪田です。
みなさん、JDK 9は使っていますか?この記事ではOpenJDKのJDK 9をMacでビルドします。
実はビルドせずともダウンロードしてインストールすることもできます。
https://jdk9.java.net/download/
ですが、最新ではない場合もありますので、ここではビルドします!
Mercurial
OpenJDKのソースコードはMercurialで管理されています。まだMercurialをセットアップしていない場合は、インストールしましょう。MacでHomebrewを使っている方であればbrew install hgです。
ソースコードの取得
OpenJDKのソースコードを取得します。defaultブランチの最新のソースコードを取得するよりも、バージョンのタグが付いている方がよいでしょう。タグの一覧は次のURLで見れます。
http://hg.openjdk.java.net/jdk9/jdk9/tags
上部にあるものが新しいタグです。jdk-9+xxx形式の最新のタグ名を使いましょう。今回はjdk-9+121のタグを使います。
$ hg clone -r jdk-9+121 http://hg.openjdk.java.net/jdk9/jdk9/ jdk-9+121 adding changesets adding manifests adding file changes added 2098 changesets with 3508 changes to 360 files updating to branch default 284 files updated, 0 files merged, 0 files removed, 0 files unresolved
最後のjdk-9+121はクローンしたソースコードを格納するディレクトリ名です。ディレクトリに移動します。
$ cd jdk-9+121
ここからさらにソースコードを取得します。
$ bash ./get_source.sh # Repositories: corba jaxp jaxws langtools jdk hotspot nashorn corba: hg clone http://hg.openjdk.java.net/jdk9/jdk9/corba corba jaxp: hg clone http://hg.openjdk.java.net/jdk9/jdk9/jaxp jaxp jaxp: requesting all changes ...(中略)... jdk: searching for changes jdk: no changes found .: searching for changes .: adding changesets .: adding manifests .: adding file changes .: added 1 changesets with 1 changes to 1 files .: 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
ビルド
これでconfigureできます。私の環境は複数のJDKが入っているので、ビルドに使うJDKを指定します。デバッグ版がほしい場合はさらに--enable-debug --with-target-bits=64
オプションをつけます。
$ bash ./configure --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home Running generated-configure.sh configure: Configuration created at Thu Jun 9 11:14:16 JST 2016. configure: configure script generated at timestamp 1464173584. checking for basename... /usr/bin/basename ...(中略)... ==================================================== The existing configuration has been successfully updated in /Users/jyukutyo/code/java-oss/jdk-9+121/build/macosx-x86_64-normal-server-release using configure arguments '--with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home'. Configuration summary: * Debug level: release * HS debug level: product * JDK variant: normal * JVM variants: server * OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64 * Version string: 9-internal+0-2016-06-09-111419.jyukutyo.jdk-9121 (9-internal) Tools summary: * Boot JDK: java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) (at /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home) * Toolchain: clang (clang/LLVM from Xcode 7.2.1) * C Compiler: Version 7.0.2 (at /usr/bin/clang) * C++ Compiler: Version 7.0.2 (at /usr/bin/clang++) Build performance summary: * Cores to use: 4 * Memory limit: 8192 MB WARNING: The result of this configuration has overridden an older configuration. You *should* run 'make clean' to make sure you get a proper build. Failure to do so might result in strange build problems.
configureできたので、make allコマンドを実行します。
$ make all Building target 'all' in configuration 'macosx-x86_64-normal-server-release' Building JVM variant 'server' with features 'all-gcs cds compiler1 compiler2 dtrace fprof jni-check jvmci jvmti management nmt services vm-structs' Compiling 8 files for BUILD_TOOLS_LANGTOOLS Creating libjsig.dylib from 1 file(s) ...(中略)... Creating support/classlist.jar Creating jdk jimage Creating jre jimage Finished building target 'all' in configuration 'macosx-x86_64-normal-server-release'
JDK9がインストールされました。さっそく使いましょう。
JDK 9を使う
build/macosx-x86_64-normal-server-release/jdkディレクトリがJAVA_HOMEとなります。
$ cd build/macosx-x86_64-normal-server-release/jdk/bin $ ls appletviewer jarsigner.diz javah.diz jdb jimage.diz jmap jrunscript.diz jstat orbd.diz rmid serialver.diz wsgen appletviewer.diz java javap jdb.diz jinfo jmap.diz jsadebugd jstat.diz pack200 rmid.diz servertool wsgen.diz idlj javac javap.diz jdeps jinfo.diz jmod jsadebugd.diz jstatd pack200.diz rmiregistry servertool.diz wsimport idlj.diz javac.diz jcmd jdeps.diz jjs jmod.diz jshell jstatd.diz policytool rmiregistry.diz tnameserv wsimport.diz jar javadoc jcmd.diz jhsdb jjs.diz jps jshell.diz keytool policytool.diz schemagen tnameserv.diz xjc jar.diz javadoc.diz jconsole jhsdb.diz jlink jps.diz jstack keytool.diz rmic schemagen.diz unpack200 xjc.diz jarsigner javah jconsole.diz jimage jlink.diz jrunscript jstack.diz orbd rmic.diz serialver unpack200.diz
JDK 9から入ったjhsdbやjmodというコマンドがありますね。
$ export JAVA_HOME=~/code/java-oss/jdk-9+121/build/macosx-x86_64-normal-server-release/jdk/ $ java -version openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-2016-06-09-111419.jyukutyo.jdk-9121) OpenJDK 64-Bit Server VM (build 9-internal+0-2016-06-09-111419.jyukutyo.jdk-9121, mixed mode)
ヒャッハー!9になりました。これでJavaのREPL、jshellが使えますよ!
$ ./jshell | Welcome to JShell -- Version 9-internal | For an introduction type: /help intro jshell> "Hello World!" $1 ==> "Hello World!"
サマリー
さて今回はOpenJDK 9をビルドしてみました。次回はJava 9の機能のどれかを使ってみます。
2016/06/09追記
コマンドではないですが、HSDB自体ははJava 7から使える、とのご指摘をいただけました。