我有一个与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 [???]
这对测试非常有用。
答案 0 :(得分:1)
您可以在脚本调用后传递所需的参数:
$ 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
。如果{{1} }计算结果为false表示脚本是使用args
运行的。
命令行调用:
GroovyScriptEngine
也可以添加异常处理以及其他改进。希望有所帮助。