从java程序在groovy脚本中填充变量

时间:2014-07-23 22:10:47

标签: groovy

我知道如何从Java代码中调用Groovy代码,但是,在运行Groovy脚本script.groovy时,您是否可以请求Java程序填充其varabies?

// script.groovy
import static org.mydomain.WiseJavaProgram.*;
pleasePopulateMeWithVariables();
println numberOfLegs // 2
// We didn't declare numberOfLegs in our sript, the Java program set it for us.

我想也许因为script.groovy应该将其环境传递给pleasePopulateMeWithVariables方法,但我还没有找到如何做到这一点。这甚至可能吗?

我想要使用这种行为的情况:我有script.groovy,还有Java程序知道的未定义数量的groovy脚本,但script.groovy不知道,我想将它们中声明的内容添加到script.groovy。基本上,这些附加脚本是数据,例如各种产品及其功能的描述。如果您运行创建GroovyShell的Java程序并在其中评估数据脚本然后script.groovy,这很容易,但对我来说,我们最初需要调用script.groovy,而不是Java程序。

1 个答案:

答案 0 :(得分:1)

与往常一样,在提出问题时,我是答案背后的一步--__-

我正在搜索的“环境”是Script对象本身,script.groovy仅提供this。所以:

// script.groovy
import static org.mydomain.WiseJavaProgram.*;
populateWithVariables(this);
println numberOfLegs // 2

// WiseJavaProgram.java
public class WiseJavaProgram {
  public static void populateWithVariables(Script script) {
    script.evaluate('numberOfLegs = 2');
    script.evaluate(new File("another.groovy"));
    script.evaluate(new File("yetAnother.groovy"));
  }
}