プラグイン作って覚えたことを淡々と記録するよ(番外編: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.
はて。ここ最近,あたしは仕事をしているのだろうか...