gpt4 book ai didi

java - 从命令行绑定(bind)变量来测试 groovy 脚本

转载 作者:行者123 更新时间:2023-12-01 12:47:44 27 4
gpt4 key购买 nike

我有一个与 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com