Groovy使方法从一个脚本可见到另一个脚本

时间:2014-03-06 19:31:36

标签: java groovy

我有一个脚本,其中包含我想从其他脚本访问的实用程序方法。

我在我的java代码中加载我的脚本

static {
    GroovyShell shell = new GroovyShell();
    //This is the script that has the utility 
    groovyUtils = shell.parse(new InputStreamReader(MyJavaClass.class.getResourceAsStream("scripts/json/MyUtils.groovy")));
    //This is the script that does thing
    groovyScript = shell.parse(new InputStreamReader(MyJavaClass.class.getResourceAsStream("scripts/json/MyScript.groovy")));
}

我想公开MyUtils.groovy中可用于MyScript.groovy的方法(以及将来的其他脚本)

1 个答案:

答案 0 :(得分:2)

有多种方法可以实现这一目标。

你在谈论方法,所以我猜你在MyUtils.groovy有一个班级。 在这种情况下,您可以指定Binding,例如

def myUtils = new MyUtils()
def binding= new Binding([  method1: myUtils.&method1  ]) 
def shell= new GroovyShell(binding)

shell.evaluate(new File("scripts/json/MyScript.groovy"))

在上文中,您可以在脚本中引用method1,最终将在myUtils实例上调用它。

另一种解决方案是指定脚本基类,例如

def configuration = new CompilerConfiguration()
configuration.setScriptBaseClass('MyUtils.groovy')
def shell = new GroovyShell(this.class.classLoader, new Binding(), configuration)

MyUtils类必须延伸Script然后;所有方法都可以在使用shell解析的脚本中使用。


嵌入/运行Groovy的方法基本上有多种。在设计DSL时经常讨论这些问题。你可以看看,例如here,如果您之前没有搜索过它。