首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将变量从命令行绑定到测试groovy脚本

将变量从命令行绑定到测试groovy脚本
EN

Stack Overflow用户
提问于 2014-07-02 08:45:44
回答 1查看 1.9K关注 0票数 0

我有一个与GroovyScriptEngine结合使用的groovy脚本:

代码语言:javascript
复制
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“如下所示:

代码语言:javascript
复制
println("${testVar} !!!")

我想要的是能够测试从命令行调用这个脚本,但是我还没有找到将绑定变量传递给我的脚本的方法。

$ groovy printHello.groovy ??

这对测试是非常有用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-02 21:32:35

您只需在脚本调用之后传递所需的参数:

代码语言:javascript
复制
$ groovy groovyAuthDefault.groovy user pass

在脚本中,所有参数都可以通过args变量访问。More info

这就是你要找的吗?

更新

找到了解决方案,但它有一些局限性,也许可以绕过它们,但不知道具体如何解决。正如我前面所写的,当您从命令行调用脚本时,您可以传递保存在args列表中的参数。问题在于GroovyScriptEngine没有用它的主要方法调用外部脚本--没有args列表,所以它在MissingPropertyException中失败了。这样做的目的是设置假args

java

代码语言:javascript
复制
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

代码语言:javascript
复制
if(args) {
    setBinding(new Binding(Eval.me(args[0])))
}
println("${testVar} !!!")

在printHello.groovy中,args被选中。如果计算结果为true,则意味着脚本是从带有参数的命令行调用的,并且根据传递的参数的第一个元素设置一个新的Binding (普通的groovy脚本扩展了groovy.lang.Script )。如果args的计算结果为false,则意味着脚本是用GroovyScriptEngine运行的。

命令行调用:

代码语言:javascript
复制
groovy printHello.groovy [testVar:\'hi\']

异常处理也可以与其他改进一起添加。希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24526678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档