No Programming, No Life

プログラミング関連の話題や雑記

Mac OSXにOpenJDK7をインストールしてGroovyを実行する

こちら@yusukeyさんの記事を参考にMac OSXにOpenJDK7をインストールしてGroovyを実行するところまで試してみたのでメモしておきます。

1.まずはOpenJDK7をダウンロード

Mac OSX用のバイナリが以下から手に入るのでダウンロードしてきます。
http://code.google.com/p/openjdk-osx-build/downloads/list
ひとまずこれを書いてる時点の最新バージョンである

OpenJDK-OSX-1.7-universal-20110729.dmg

をダウンロードしてきました。

2.インストール

  • OpenJDK-OSX-1.7-universal-20110729.dmg をダブルクリック
  • デュークをクリック

f:id:fumokmm:20110730160238p:image

  • 続ける(どんどん進む)

f:id:fumokmm:20110730160237p:image

  • インストール完了

f:id:fumokmm:20110730160236p:image

3.インストール確認

open /Applications/Utilities/Java\ Preferences.app

f:id:fumokmm:20110730161010p:image

Open JDK7が入りました。

4.環境変数JAVA_HOMEの設定

Open JDK7は以下にインストールされるようなので、以下を環境変数JAVA_HOMEに設定します。

/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home

私の環境だとJAVA_HOMEは以下となっていました。

$ echo $JAVA_HOME
/Library/Java/Home

確認してみるとHOMEはシンボリックリンクだったので、ひとまず、今のHOMEはHome6として残しておき、Java7用としてはHome7という名前でシンボリックリンクを作成することにしました。
$ ln -s /System/Library/Frameworks/JavaVM.framework/Home /Library/Java/Home6
$ ln -s /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home /Library/Java/HOME7
$ rm /Library/Java/Home

次に.profileを以下のように編集します。

#export JAVA_HOME=/Library/Java/Home6
export JAVA_HOME=/Library/Java/Home7

いつでもHome6に戻せるようにHome6はコメントアウトしておきます。

$ . ~/.profile
$ java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)

1.7にちゃんとなってます。

5.Groovyの実行

バージョン確認

$ groovy -v
Groovy Version: 1.9.0-beta-1 JVM: 1.7.0-internal

スクリプト実行

$ cat hello.groovy 
println 'Hello, Groovy! with JDK7'
$ groovy hello.groovy
Hello, Groovy! with JDK7

スクリプト、実行できました。

GroovyShell実行

$ groovysh
Groovy Shell (1.9.0-beta-1, JVM: 1.7.0-internal)
Type 'help' or '\h' for help.

                                                                                                                                                                                                                                            • -

groovy:000> assert 1_0_0 + 2_0_0 == 3____00
===> null
groovy:000> assert 255 == 0b11111111
===> null
groovy:000> println 'Hello!'
Hello!
===> null
groovy:000>


GroovyShellも動きました。

GroovyConsole実行

$ groovyConsole &
/Applications/Utilities 557 $ java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:108)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:130)
Caused by: java.lang.NoClassDefFoundError: com/apple/eawt/ApplicationListener
at com.apple.mrj.MRJApplicationUtils.registerAboutHandler(MRJApplicationUtils.java:64)
at com.apple.mrj.MRJApplicationUtils$registerAboutHandler.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at groovy.ui.script13120101426311558877614.run(script13120101426311558877614.groovy:22)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1117)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1103)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1052)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:882)
at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:785)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:768)
at groovy.util.FactoryInterceptorMetaClass.invokeMethod(FactoryBuilderSupport.java:1274)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
at groovy.ui.view.MacOSXMenuBar.run(MacOSXMenuBar.groovy:46)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1117)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1103)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:361)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:882)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
at groovy.ui.Console$__clinit__closure23.doCall(Console.groovy:260)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:882)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at groovy.ui.ConsoleView$_run_closure1.doCall(ConsoleView.groovy:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:882)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
at groovy.ui.ConsoleView$_run_closure1.doCall(ConsoleView.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:882)
at groovy.lang.Closure.call(Closure.java:410)
at groovy.lang.Closure.call(Closure.java:404)
at groovy.util.FactoryBuilderSupport.dispathNodeCall(FactoryBuilderSupport.java:838)
at groovy.util.FactoryBuilderSupport.doInvokeMethod(FactoryBuilderSupport.java:744)
at groovy.util.FactoryBuilderSupport.invokeMethod(FactoryBuilderSupport.java:464)
at groovy.util.FactoryInterceptorMetaClass.invokeMethod(FactoryBuilderSupport.java:1272)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:145)
at groovy.ui.ConsoleView.run(ConsoleView.groovy:51)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1117)
at groovy.util.FactoryBuilderSupport.build(FactoryBuilderSupport.java:1103)
at groovy.util.FactoryBuilderSupport$build.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at groovy.ui.Console.run(Console.groovy:301)
at groovy.ui.Console$run$0.callCurrent(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
at groovy.ui.Console.run(Console.groovy:264)
at groovy.ui.Console$run.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
at groovy.ui.Console.main(Console.groovy:199)
... 6 more
Caused by: java.lang.ClassNotFoundException: com.apple.eawt.ApplicationListener
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 108 more

第17回 G*ワークショップに参加してきました

はじめに

2011年7月29日に行われました 7月29日 第17回 G*ワークショップ(東京都) に今回も参加してきました。
今回は私は発表はなしです。運営委員になったはいいのですが、今回は受付でネームカードを渡す程度の仕事しかしていません(^^;

セッション!

山本さん(id:mottsnite/@)のGrails 2.0 M1についての発表

と、

きょんさん(id:kyon_mm/@)のGroovyとかテストとかJenkinsとかVCSとかの話

(このスペースはスライドがアップされ次第更新)

でした。

発表内容については、山本さんは安定の運びでGrails2.0の素晴らしさを伝えており、会場をグイグイ引っ張っておられました。Grailsドキュメント会に参加している身としては、「ドキュメントどうするよ?どうせなら2.0対応にしたいなぁ…」とか思ってしまうわけですが、そんなことどうでもよくなるくらい2.0便利そうですね。
次作るWebアプリはGrails2.0使うぞ!
そして次はきょんさんですが、ゆとり世代と話を絡めて、GroovyやGradle, Jenkinsなどの、いわゆる最近のイケてるプロダクツを駆使してもTDDな開発環境のお話でした。
私の方は最近、開発が非常に残念ながらC#となってしまったため、仕事では素敵な開発環境を構築することはできておりませんが、大変参考になる内容だったので、次のプロジェクトではぜひ参考にしたいところです。

それにしてもGroovyじゃんけん、今後流行る兆し(笑)

UStream

Twitter4Jでおなじみの@さんがUstreamしてくれておりました。
http://www.ustream.tv/channel/jgug

Togetter!

20110729_第17回 G*ワークショップ(#jggug ) - Togetter
このイベントに対してのつぶやきがまとめられています。

懇親会!

今回はLT大会じゃなくて、お店での懇親会でしたので、G*な方々と楽しくお話させていただくことができました。みんな様々な立場で、さまざまな領域でGroovyと出会い、活用し始めているという共通点を持っているので、自然と話も盛り上がり、あっという間に時間が過ぎて参りました。

おわりに

プログラミングGroovyが発売され、今後日本でもGroovyブームが巻き起こる兆しが見えてきました。Groovyを使ってハッピーでグルービーな開発を行いましょう!

補足

そういえばワークショップが始まる前に



との突っ込みが入ったので、JGGUGのページをちゃんと更新したほうが良いですね。ちょこちょこ更新してゆきたいと思います。

書籍紹介

Groovyに興味のあるあなた!Groovyistな方、必読の本をご紹介します。

プログラミングGROOVY

プログラミングGROOVY


Grails徹底入門

Grails徹底入門

  • 作者: 山田正樹,山本剛,上原潤二,永井昌子,杉山清美,杉浦孝博,笠原史郎,香月孝太,福岡竜一,伊堂寺北斗
  • 出版社/メーカー: 翔泳社
  • 発売日: 2008/08/26
  • メディア: 大型本
  • 購入: 2人 クリック: 34回
  • この商品を含むブログ (27件) を見る

Twitter上に広がるGroovyistの輪、あなたもGroovyバッジを付けてみませんか?

アイコンにGroovyのロゴを追加するjarを作りました  - No Programming, No Life
にてアイコンにGroovyバッジ(Groovyのロゴ)を付けられるお手軽アプリを公開させていただいております。


これを利用して実際にTwitterアイコンにGroovyバッジを付けてくれている
クールなGroovyistをご紹介したいと思います!*1
ちなみに、おそらくこのツールを使って作ったのではない方も混じっておられますが、Groovyを愛する気持ちに違いはないと思いますので、あわせてご紹介させていただきたく思います。

Groovyバッジ付きGroovyistリスト (アルファベット順)

TwitterID アイコン TwitterID アイコン
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ New Groovyist

私もバッジ付けたよ!私も付けてるけど、リストに入ってないよ!
という方は@まで一声おかけ下さい。

Enjoy groovy!

更新履歴

  • 2011-10-01 @さんを追加しました。
  • 2011-09-20 @さんを追加しました。
  • 2011-09-04 @さんを追加しました。
  • 2011-09-02 @さんを追加しました。

*1:なお、見つけ次第このリストは追加してゆきたいと思います。