Groovy 1.6b2のgrapeを試す

ネタ元はこれ→Groovy 1.5.7 and 1.6-beta2 released - DZone Java
id:uehajさんが訳してくれました。

●Grape・・適応的・先進的パッケージング・エンジン
AST変換による強化として、Groovy 1.6-beta-2では「Groovy Advanced or Adaptable Packaging Engine(Groovy先進もしくは適応的パッケージング・エンジン)」のプレビューバージョンを提供します。Groovyスクリプトは、明示的に@Grab変換アノテーションあるいはGrape.grab()メソッドを呼ぶことで、特定のライブラリを要求することができます。ランタイムが必要なJARを見つけてくれます。Grapeでは、あなたは依存性のあるライブラリ無しでスクリプトを容易に配布することができ、それらのライブラリはそのスクリプトを最初に実行したときにダウンロードされます。

Grな日々(uehajの日記) - Groovy 1.5.7と1.6-beta-2が公開

で,おもしろがって実際に試してみたよ。結論から言えば,

  • @Grabアノテーションは動いた気配がない。:-(
  • Grape.grab()メソッドやgrapeコマンドが動いた。:-)

だった。@Grabアノテーションが本命だっただけに,ちと残念(他のはGantのIvyサポートで代用が利く)。そんでも,ライブラリ管理が楽になりそうな試みは面白く思うので,生暖かく見守りたい。

せっかくだから,試したことを残す。

Groovy 1.6b2を入手。サンプル通り,こんなコードを書く。

== TestClassAnnotation.groovy ==
import com.jidesoft.swing.JideSplitButton

@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,2.3.0)')
public class TestClassAnnotation {
  public static String testMethod() {
    return JideSplitButton.class.name
  }

  public static void main(String[] args) {
    println(testMethod())
  }
}

groovyコマンド使って実行するもエラーでコケた。:-(

> groovy -v
Groovy Version: 1.6-beta-2 JVM: 1.6.0_03

> groovy TestClassAnnotation.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed,
C:\temp\TestClassAnnotation.groovy: 1: unable to resolve class com.jidesoft.swin
g.JideSplitButton
 @ line 1, column 1.
   import com.jidesoft.swing.JideSplitButton
   ^

1 error

でも,こんな(↓)スクリプトや,

import groovy.grape.*
Grape.initGrape()
Grape.grab([group:'org.apache.ant', module:'ant', version:'1.7.0'])

grapeコマンドは,

> grape install com.jidesoft jide-oss

ちゃんと動いて,$HOME/.groovy/grapesにローカルリポジトリが構成されたよ。でも,必要なライブラリをgrapeコマンドでローカルリポジトリに配置できてても@Grabアノテーションは効いているふうじゃなかったので,1.6b2はそうゆうもんだと理解した。:-P


ps.
ライブラリ取ってくるだけなら,Mavenはじめ,IvyやらmvnbeansIvyBeansとかあるけど,それが実行時(groovy)やコンパイル時(groovyc)に組み込まれるってのは画期的だと思う(@Grabアノテーションの記述が冗長とか思ったのは,ナイショだ)。
これでIDEが@Grabアノテーションに対応してくれたら,言うこと無い。:-D


JVMベースの軽量言語はいろいろあるけど,こうゆう下回りが充実してくるとGroovy以外を選択する理由がなくなるな。