日々常々

ふつうのプログラマがあたりまえにしたいこと。

MacでJava7でGroovyConsoleのメモ

参考


あ、そうそう。MacBookAir買ったんですよ。Twitterでは言ってましたけど、書いてなかった気がします。11インチの最小構成。一番安いのです。SSDだしメモリそんな要らないかなーとか思って。あと初Macなので最悪失敗しても良いようにと。杞憂でしたけど。あとついでにUS配列キーボードです。かっこいいから。キートップのひらがなとかださいじゃないですか。そんな理由。このMBAは私のなのであげません。


そんなわけで新しいコンピュータを買ったら、もちろんJavaとGroovyを入れないといけないです。
Groovyは Homebrew で良いっぽいんですけど、Javaはそうもいかない。なので、先頭にあげたここからダウンロードしてインストールします。なにぶん初Macなんで「dmgってなんやねん?」とかからですけど、何とかなりました。ディスクイメージらしいですね。よくわからないけどzipみたいなもんかなと思ってます。開いたら中にインストーラーがあるので実行。そのままインストール。よくわからないディレクトリにインストールされますけど、とりあえずそれで動いてるからいいや。

GroovyConsoleが動かない

MacだとGroovyConsoleが動かないってのは前から言われてる話。けど今日 kwkmsj さんのツイートが見えまして。

おや。と思ってJAVA_HOMEをJDK7に切り替えてGroovyConsole実行。
Airof:~ irof$ groovyconsole
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
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.script13154933244431558877614.run(script13154933244431558877614.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:1053)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:883)
	at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:793)
	at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:776)
	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:883)
	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:883)
	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:883)
	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:883)
	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

だめじゃん。まぁこれはわかってます。
この時点で入っているのはGroovy1.8.1でした。Groovy1.8.2が出てます。brew upgrade を叩いてGroovyを更新、ついでにJenkinsも更新。Jenkinsは関係ないですけど。更新が終わったらGroovyConsoleを再度実行。

Airof:~ irof$ groovy -version
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Groovy Version: 1.8.2 JVM: 1.7.0-internal
Airof:~ irof$ groovyconsole
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
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
(略)

かわらず。
openjdk-osx-buildを見に行ったら OpenJDK-OSX-1.7-universal-20110908.dmg がありました。私が前にインストールしたのは 20110810 になってました。もう一ヶ月も経つんだなーとか思いながら更新。

Airof:~ irof$ java -version
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
registered thread 0x10100b800
registered thread 0x102801000
registered thread 0x100836000
registered thread 0x100836800
registered thread 0x101022800
registered thread 0x101025800
registered thread 0x101026000
registered thread 0x100840000
registered thread 0x101032000
registered thread 0x102855000
registered thread 0x102856000
registered thread 0x101029000
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)

なんかスレッドのログでしょうか。出るようになりました。インストール失敗したのかとごのごにょやってみましたけど特に変わらず。気にしない事にします。


とりあえず GroovyConsole は動くようになりました。
ghello だって書けちゃいます。実行するたびに registerd thread がコンソールにぴょこぴょこ出ますけど。これも気にしません。JDK更新したらそのうち出なくなるんじゃないでしょうかね。

GroovyConsoleが終了しない

GroovyConsole を Command+Q で閉じようとしても閉じてくれない。もっとちゃんと言うと、GroovyConsole 自体は終了はしてる感じで操作が出来なくなる。ウィンドウは動かせるからフリーズってのでもない。表示はそのままで、閉じないだけ。
Control+C すれば終了はするんだけど、なんか気持ち悪い。というか Control キー押し辛い。
とりあえず System.exit 0 を GroovyConsole で叩いてみたら、すんなり終了してくれた。GroocyConsole の中身いじったら普通に終了してくれる様になるだろうか。

追記(2011/10/10)

現時点の最新 OpenJDK-OSX-1.7-universal-jdk-b210-20111008.dmg を使用すれば、スレッドのログも出なくなってますし、GroovyConsoleもおとなしく終了してくれました。