我有一个与 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 开始保留已定义的所有绑定(bind)变量。脚本“/home/user/tmp/printHello.groovy”是这样的:
println("${testVar} !!!")
我想要的是能够测试从命令行调用它的脚本,但我还没有找到将绑定(bind)变量传递给我的脚本的方法。
$ groovy printHello.groovy [???]
这对于测试非常有用。
最佳答案
您可以在脚本调用后传递所需的参数:
$ groovy groovyAuthDefault.groovy user pass
在脚本中,所有参数都可以通过 args 变量访问。 More info .
这就是您要找的吗?
更新
找到了解决方案,但它有一些限制,也许可以绕过它们,但不知 Prop 体如何。
正如我上面所写,当您从命令行调用脚本时,您可以传递保存在 args 列表中的参数。问题在于 GroovyScriptEngine
不使用其 main 方法调用外部脚本 - 没有 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\']
还可以添加异常处理以及其他改进。希望有帮助。
关于java - 从命令行绑定(bind)变量来测试 groovy 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24526678/