home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Groovy/Scripting/Tips

Groovy/Scripting/Tips

Groovy / Scripting / Tips
id: 1161 所有者: msakamoto-sf    作成日: 2013-03-10 00:32:12
カテゴリ: Groovy 

GroovyScriptとしてファイルに書いたのをそのままgroovyコマンドで実行するときのTips

共通コードをライブラリ化したい

多分オーソドックスなのは「共通コードはライブラリ化してjarにするだろJK」なのだろうけど、どうせ1-2つのクラスだけなんだろうし、それだけのためにjar作ってclasspathいじるのメンドイ、という時に、groovycでコンパイルしたクラスをそのまま同じディレクトリに放置しておくのもアリだなと思ってこんな感じにしました。

ライブラリ側:lib.groovy

@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.2'),
@Grab(group='ch.qos.logback', module='logback-classic', version='1.0.9'),
])
import groovy.util.logging.*

@Slf4j
class C1 {
    static void m1() {
        println 'from m1:'
        log.trace 'trace2'
        log.debug 'debug1'
        log.info  'info1'
        log.warn  'warn1'
        log.error 'error1'
    }
}

@Slf4j
class C2 {
    static void m2() {
        println 'from m2:'
        log.trace 'trace2'
        log.debug 'debug2'
        log.info  'info2'
        log.warn  'warn2'
        log.error 'error2'
    }
}

これをコンパイルしておきます。

$ groovyc lib.groovy
$ ls
C1.class  C2.class  lib.groovy

groovycが"@Grape"も見てくれるのか、依存jarを指定する必要がないのがちょっと感動的です。

で、同じディレクトリにC1, C2を使うメインとなるGroovy Scriptを置きます。

main.groovy:

$ cat main.groovy
@GrabConfig(systemClassLoader=true)
@Grapes([
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.2'),
@Grab(group='ch.qos.logback', module='logback-classic', version='1.0.9'),
])
import groovy.* // dummy

C1.m1()
C2.m2()

"@Grapes"と本体コードの間にダミーの"import"を入れてますが、これが無いといきなり"C1"で始まるのが、何がイケないのかわかりませんがsyntaxエラーで怒られました。
こっちでも同じ"@Grab"が必要なのと、こちらは実行側なので"@GrabConfig"の調整が必要だったりします。

あとはgroovyでもGroovyServのgroovyclientでも好きな方で実行してください。

$ groovy main.groovy
from m1:
00:38:33.909 [main] DEBUG C1 - debug1
00:38:33.913 [main] INFO  C1 - info1
00:38:33.914 [main] WARN  C1 - warn1
00:38:33.914 [main] ERROR C1 - error1
from m2:
00:38:34.030 [main] DEBUG C2 - debug2
00:38:34.030 [main] INFO  C2 - info2
00:38:34.030 [main] WARN  C2 - warn2
00:38:34.030 [main] ERROR C2 - error2

共通コードを変更した時はgroovycで再コンパイルが必要だったり、共通コードのファイル名を

xxxx.groovy

としたら、その中で

class Xxxx {

とするとなんかうまく全体として動いてくれないなど微妙な地雷臭はあったりしましたが、一応これはこれでアリといえばアリかなと。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-03-10 00:40:56
md5:5e1564cfd2b5099fc072cbefc8218901
sha1:212c35cfd7830a6445486c8b990c148f651d92f9
コメント
コメントを投稿するにはログインして下さい。