公式 : http://kobo.github.com/groovyserv/index.html
インストーラもありますが、win用のバイナリのzipファイルが配布されてますので、そちらを展開して環境変数を調整するだけでもOKです。というかそちらの方法しか試してません。
自分はCygwin使いですので、Cygwinの.bashrcでこんな感じにしてます。
# Groovy GROOVY_HOME=/cygdrive/c/work/apps/groovy-1.8.9 export PATH=$GROOVY_HOME/bin:$PATH # GroovyServ GROOVYSERV_HOME=/cygdrive/c/work/apps/groovyserv-0.11 export PATH=$GROOVYSERV_HOME/bin:$PATH alias gr='groovyclient'
"GROOVYSERV_HOME"は本来は不要で、binにpathが通ってればオッケーなんですが、見た目が揃ってるので入れてます。また、"groovyclient"もタイピングが長いので"gr"にalias設定してます。
まずgroovyserverを起動します。
$ groovyserver Groovy home directory: /cygdrive/c/in_vitro/devtools/groovy-1.8.9 Groovy command path: /cygdrive/c/in_vitro/devtools/groovy-1.8.9/bin/groovy (found at GROOVY_HOME) GroovyServ home directory: /cygdrive/c/in_vitro/devtools/groovyserv-0.11 GroovyServ work directory: /home/FengJing/.groovy/groovyserv Original classpath: (none) GroovyServ default classpath: /cygdrive/c/in_vitro/devtools/groovyserv-0.11/lib/* Starting.... groovyserver 224(1961) is successfully started
あとはGroovyスクリプトを書いて、groovyclientで実行するだけです。
groovyserverを止めたい場合は"-k"付きで実行します。
$ groovyserver -k Groovy home directory: /cygdrive/c/in_vitro/devtools/groovy-1.8.9 Groovy command path: /cygdrive/c/in_vitro/devtools/groovy-1.8.9/bin/groovy (found at GROOVY_HOME) GroovyServ home directory: /cygdrive/c/in_vitro/devtools/groovyserv-0.11 GroovyServ work directory: /home/FengJing/.groovy/groovyserv Original classpath: (none) GroovyServ default classpath: /cygdrive/c/in_vitro/devtools/groovyserv-0.11/lib/* Killed groovyserver of 224(1961)
簡単ですね。たったこれだけの手間で、Groovyスクリプトの実行が爆速になります。
通常はgroovyclientによる実行のたびにクラスローダが生成されて"@Grab"で依存関係が読み込まれます。クラスのstaticフィールドなんかもそうですが、つまり、通常は実行のたびにクラスローダがリセットされると考えてよいでしょう。
ただし、当然groovyserver側でシステムクラスローダなどで読み込まれたクラスは残ります。
それで注意が必要なのが、"@GrabConfig(systemClassLoader=true)"を使う場合です。これを使うと、"@Grab"したのが(多分)groovyserver側のシステムクラスローダに読み込まれます。ということは、初回にロードされたものが以降もずっと残ることになります。
この挙動は、システムクラスローダで読み込まれたライブラリが設定ファイルを読み込むときに、初回に読み込まれた設定がずっと残り続け、設定ファイルを書き換えても反映されないという挙動につながります。slf4j + logbackでlogback.groovyを読み込む場合が該当したりしてます。
この場合は、groovyserverを再起動する他ありません。
$ groovyserver -r Groovy home directory: /cygdrive/c/in_vitro/devtools/groovy-1.8.9 Groovy command path: /cygdrive/c/in_vitro/devtools/groovy-1.8.9/bin/groovy (found at GROOVY_HOME) GroovyServ home directory: /cygdrive/c/in_vitro/devtools/groovyserv-0.11 GroovyServ work directory: /home/FengJing/.groovy/groovyserv Original classpath: (none) GroovyServ default classpath: /cygdrive/c/in_vitro/devtools/groovyserv-0.11/lib/* Killed groovyserver of 6672(1961) Restarting groovyserver Starting.... groovyserver 7936(1961) is successfully started
"@Grab"使えるの?とか、クラスのstaticフィールドどうなるの?とかは、GroovyServのFAQページにあったりします: