无法将java中的args传递给groovy脚本

时间:2016-03-02 21:50:36

标签: java groovy

我正在尝试编写黄瓜测试(使用cucumber-jvm)在示例文件上运行groovy脚本并验证数据是否正确存储在数据库中。 (我没有编写groovy脚本,它从命令行运行得很好)。我似乎无法正确地将args放入groovy脚本中。谁能告诉我如何让它发挥作用?

groovy脚本具有以下代码:

/** Check command line options.  */
def cli = new CliBuilder(usage: 'groovy scriptname.groovy [-h] -f file')
cli.h(longOpt: 'help', 'Usage information', required: false)
cli.f(longOpt: 'file', 'File with information', args: 1)

OptionAccessor opt = cli.parse(args)
if(!opt) {
  return
}
else if(opt.h || !opt.f) {
  cli.usage()
  return
}
/** Process file.  */
def file = new File(opt.f)

我的java代码包含以下内容:

final GroovyShell shell = new GroovyShell();
final Binding binding = new Binding();
final String[] args = {"-f", fileFn};
binding.setVariable("args", args);
final File file = new File(scriptFn);
final Script script = shell.parse(file);
script.run();

从命令行运行时,groovy脚本运行正常。我跑的时候 它来自java / cucumber步骤定义,我得到错误:

groovy.lang.MissingPropertyException: No such property: args for class: FWLoader
at FWLoader.run(FWLoader.groovy:171)

groovy脚本中失败的行是

OptionAccessor opt = cli.parse(args)

有什么建议吗?我是初学者,对java很新(很多年用C / C ++编程)。

1 个答案:

答案 0 :(得分:0)

它可能是一个错字,但你错过了script.setBinding(binding)

final Script script = shell.parse(file);
script.setBinding(binding); // <-- here
script.run();