我有一个与GroovyScriptEngine结合使用的groovy脚本:
public static void main(String[] args) {
GroovyScriptEngine gse = new GroovyScriptEngine(new String[] {"/home/user/tmp"});
Binding varSet = new Binding();
varSet.setVariable("testVar", "Hello World");
gse.run("printHello.groovy", varSet);
}这在java中运行得很好。printHello.groovy开始保留已经定义的所有绑定变量。脚本"/home/user/tmp/printHello.groovy“如下所示:
println("${testVar} !!!")我想要的是能够测试从命令行调用这个脚本,但是我还没有找到将绑定变量传递给我的脚本的方法。
$ groovy printHello.groovy ??
这对测试是非常有用的。
发布于 2014-07-02 21:32:35
您只需在脚本调用之后传递所需的参数:
$ groovy groovyAuthDefault.groovy user pass在脚本中,所有参数都可以通过args变量访问。More info。
这就是你要找的吗?
更新
找到了解决方案,但它有一些局限性,也许可以绕过它们,但不知道具体如何解决。正如我前面所写的,当您从命令行调用脚本时,您可以传递保存在args列表中的参数。问题在于GroovyScriptEngine没有用它的主要方法调用外部脚本--没有args列表,所以它在MissingPropertyException中失败了。这样做的目的是设置假args。
java
public static void main(String[] args) {
GroovyScriptEngine gse = new GroovyScriptEngine(new String[] {"/home/user/tmp"});
Binding varSet = new Binding();
varSet.setVariable("testVar", "Hello World");
varSet.setVariable("args", null); //null, empty string, whatever evaluates to false in groovy
gse.run("printHello.groovy", varSet);
}printHello.groovy
if(args) {
setBinding(new Binding(Eval.me(args[0])))
}
println("${testVar} !!!")在printHello.groovy中,args被选中。如果计算结果为true,则意味着脚本是从带有参数的命令行调用的,并且根据传递的参数的第一个元素设置一个新的Binding (普通的groovy脚本扩展了groovy.lang.Script )。如果args的计算结果为false,则意味着脚本是用GroovyScriptEngine运行的。
命令行调用:
groovy printHello.groovy [testVar:\'hi\']异常处理也可以与其他改进一起添加。希望这能有所帮助。
https://stackoverflow.com/questions/24526678
复制相似问题