Mac OSXにOpenJDKを入れてみました。
ソースコードからビルドしなければいけないと思っていたけれども既にインストーラが用意されていて簡単です。
1. インストーラをダウンロード
以下のページより OpenJDK-OSX-1.7-universal-2011MMDD.dmg をダウンロード。
以前は32bit版と64bit版で分かれていましたがおとといユニーバーサルバイナリがリリースされたようです。
・Downloads – openjdk-osx-build – Build and package scripts for OpenJDK 1.7 under OS/X – Google Project Hosting
2. .dmgをダブルクリックし、インストーラを起動
Java7正式リリースを目前にDukeも上機嫌のご様子。
4. 確認
Appleより提供されているJVMは通常 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home に置いてありますが、OpenJDKは /Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home に配置されるようです。
/Applications/Utilities/Java Preferences.app からもちゃんと認識されていますね。
32ビット版と64ビット版が別々に認識されているのはいいとして・・なぜか3つ認識されてます。・・???まいっか。
5. JAVA_HOMEの設定
JAVA_HOMEを設定すればok。
java version “1.6.0_26”
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home/
$ java -version
openjdk version “1.7.0-internal”
OpenJDK Runtime Environment (build 1.7.0-internal-henri_2011_06_24_19_03-b00)
OpenJDK 64-Bit Server VM (build 21.0-b16, mixed mode)
6. アプリケーションの起動
侍を起動してみます。
java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:202)
at java.awt.Window.
at java.awt.Frame.
at java.awt.Frame.
at javax.swing.JFrame.
at samurai.swing.MainFrame.
at samurai.swing.Samurai$1.run(Samurai.java:33)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
はい、ダメでした。
HeadlessExceptionは通常 -Djava.awt.headless=true (サーバなどでGUIがない環境)を指定しているのにSwingやAWTのウインドウを表示しようとした際に投げられる例外です。つまりまだMac版のOpenJDKはサーバサイド用途にしか使えない???
試しに headless=false と指定してみたところ一X11が起動した後クラッシュしました。
Trace/BPT trap
クラッシュレポートをみるとスレッド17、com.apple.CoreFoundation#__CFInitialize で落ちているみたい。
・OSX OpenJDK7 crash report — Gist
ひとまずヘッドレスでは動くので自宅サーバにも入れてみようと思います。
7. IntelliJ IDEA で認識させる
IntelliJ IDEA はもちろんJava7に対応済みです。
設定は簡単でFile → Project Structure → SDKs → 右ペインの+ボタン → JSDK を選択し、/Library/Java/JavaVirtualMachines/openjdk-1.7-x86_64/Contents/Home/を指定します。
ただ、Mac のJVMはディレクトリ構成がちょっと異なるので標準API(java.*, javax.*)をそのままでは認識してくれません。
Classpathタブの[Add…]ボタンより、Contents/Home/jre/lib/rt.jar も付け加えます。
OpenJDKを指定し、rt.jar をクラスパスに追加したところ。
あとはJava7を多いに楽しむだけ!
ちなみにソースコードからビルド、インストールするのも比較的簡単です。以下の頁にステップバイステップで説明されています。
・Mac OS X Port – OpenJDK – wikis.sun.com