我知道如何从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程序。
答案 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"));
}
}