Java から Groovy を引数付きで呼び出す



Jamesでメール受信&解析プログラムを作ろうとしているのですが、
開発段階ではいちいち
jarに固めて・・・サーバにアップして・・・James再起動して・・・


・・・めんどくさい。

どうにか簡単にならんもんかね。と呑みながら考えているとき
ふと、Groovyのことを思い出しました。

Groovyなら当然Javaと相性がよいはず。
しかも、スクリプトなので、Jamesの再起動なしでいろいろ
試せそうです。


Groovyのダウンロードは、
http://groovy.codehaus.org/
ここからGroovy 1.5.6 Download zip: Binary Release
をダウンロードしました。

解凍すると、embeddableというフォルダの中にgroovy-all-1.5.6.jarが
入っていると思います。
とりあえず動かすには、このjarを参照すればよいみたい。

早速、サンプルを作って、クラスオブジェクトをスクリプトに
引数として渡せることを確認しました。


■MainLoad
package fujishinko.groovy;

import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;

public class MainLoad {
    
    public static void main(String[] args){
        try{
            
            GroovyScriptEngine gse = new GroovyScriptEngine("[groovyのスクリプトを置いたフォルダ]");
            Binding binding = new Binding();
            
            MailData data = new MailData();
            data.setTitle("タイトル");
            data.setBody("本文");
            
            binding.setVariable("args",data);
            binding.setVariable("args_opt","メッセージ");
            
            gse.run("sample.groovy", binding);
            
        } catch(Exception e){
            e.printStackTrace();
        }

    }
}


■MailData
package fujishinko.groovy;

public class MailData {
    
    private String body;
    private String title;
    public String getBody() { return body; }
    public void setBody(String body) { this.body = body; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }

}



■sample.groovy
import fujishinko.groovy.*;

def printObject(MailData data) {
    println data.getTitle()
    println data.getBody()
}

MailData data = (MailData)args
printObject(data)

print args_opt


■実行結果
タイトル
本文
メッセージ


binding.setVariableで指定したデータが、groovyで取得できていると思います。


【参考URL】
http://www.ibm.com/developerworks/jp/java/library/j-pg05245/


もどる