プラグイン作って覚えたことを淡々と記録するよ(番外編:Groovyハイブリッド)
上のエントリをきっかけとして,WebサービスとかJavaで組むのが面倒臭い部分だけGroovyで書くってのは悪くないなと思い,早速IDEAプラグインで試してみたよ。
もともとJavaとGroovyの親和性が高いってのと,JetGroovyプラグインのおかげで何の苦労もなくJava-Groovyハイブリッドのプラグインは作れたよ。
簡単だったとは言え,一応作業メモを残すとしよう。
今回は,スクリプト(Groovy)からJavaを呼ぶんじゃなく,Javaからスクリプト(Groovy)を呼ぶので,Groovy側はクラスで作っとく。
プラグインモジュールにGroovyファセットを追加するのをお忘れ無くだ。
GroovyPanelってのがGroovyのクラスで,先の"Tiny browser thumbnail client"スクリプトをクラス化しただけよ。
class GroovyPanel { def server = new XMLRPCServerProxy("http://www.groovyblogs.org:7999") def swing = new SwingBuilder() def frame = swing.frame(title: 'Thumbnail Service', : } // IDEAのToolWindowに貼り付けるため,ContentPaneを返すようにしてる。 def mainPanel = frame.getContentPane() }
そんでもって,呼び出し元のJavaコードであるGroovyTestPluginで,こんな具合にGroovyPanelをToolWindowに貼り付ける(Java側ではGroovyのクラスも普通のJavaクラスのように扱える)。
public void projectOpened() { ToolWindowManager toolWindowManager = ToolWindowManager.getInstance(project); JPanel panel = (JPanel) new GroovyPanel().getMainPanel(); ToolWindow toolWindow = toolWindowManager.registerToolWindow(TOOL_WINDOW_ID, false, ToolWindowAnchor.BOTTOM) :
うーん,案外悪くないなぁ,この方法。
Javaでややこしいコード書くよりは,全然良さげだけど,まずはGroovyを覚えねば。:-D
それと,若干の問題点(?)が2つほど。
プラグインSDKはJDK1.6じゃないとダメ:JSR-223をアテにしてるから当然ちゃあ当然か。この制限は,OSXユーザだけが困る。
#Leopardだけでもいいから,早くJDK6出してくれぃ。
Groovyのランタイムが要る:これも当たり前な話。ただ,Groovyファセットを追加しただけで,パッケージングするとGroovy SDK(約7.5M)を丸ごとバンドルするので,ちょっとシャレにならん。
たぶん,こういった用途に使うんであろう。Groovy SDKのembeddableディレクトリにgroovy-all-1.0.jar(約2.0M)ってのがあるんで,こっちをバンドルするようにする。
#出来ることなら,IDEA本体にGroovyが入っているとありがたい。
もうちょっと使い込んでいくと,他にも不満が出てくるかも知れんが,やっつけで作る俺様プラグインとかでは,この生産性の高さが威力を発揮しそうだ。:-D
ps.
はて。ここ最近,あたしは仕事をしているのだろうか...