GroovyScriptEngine を使用して Java アプリケーションに Groovy を埋め込んでいます。関連するすべてのプロパティをバインディングに入れると、すべて正常に動作します。完全を期すために、スニペットを次に示します。
public class GE2 {
GroovyScriptEngine gse;
Binding binding;
public GE2() throws Exception {
this.gse = new GroovyScriptEngine(new String[]{"scripts"});
binding = new Binding() {
@Override
public Object getProperty(String property) {
// this method is never called when trying println name2 from groovy
return "Prop: " + property;
}
};
binding.setVariable("GE2", this);
gse.run("t1.groovy", binding);
}
public String getName() {
return "theName";
}
public void doIt(String... args) {
System.out.printf("Doing it with %s\n", Arrays.toString(args));
}
public static void main(String[] args) throws Exception {
new GE2();
}
}
私のgroovyスクリプト t1.groovy は次のとおりです。
println GE2.name // this correctly prints theName
// println name2 <- this raises No such property: name2 for class: t1
GE2.doIt('a', 1, 42); // this works as expected too
GE2.
GE2のプロパティとメソッドをスクリプトから直接 「バイパス」して使用する方法はありますか?
JDK 7 と Groovy 2.1 を使用しています