将命令行参数传递给Groovy脚本

时间:2018-05-21 09:53:16

标签: groovy

我有一个像这样的简单Groovy脚本:

class Main {
    static void main(String... args) {
        args.each {
            println ${it}
        }
    }
}

我无法弄清楚如何将命令行参数传递给它。我在Windows上运行脚本:

  

Groovy myscript.groovy“arg1”“arg2”

导致错误:

  

Caught:groovy.lang.MissingMethodException:没有方法签名:Main $ _main_closure1。$()适用于参数类型:( Main $ _main_closure1 $ _closure2)值:[Main $ _main_closure1 $ _closure2 @ 68b32e3e]   可能的解决方案:是(java.lang.Object),是(java.lang.Object),any(),any(),any(groovy.lang.Closure),use([Ljava.lang.Object;)   groovy.lang.MissingMethodException:没有方法签名:Main $ _main_closure1。$()适用于参数类型:( Main $ _main_closure1 $ _closure2)值:[Main $ _main_closure1 $ _closure2 @ 68b32e3e]   可能的解决方案:是(java.lang.Object),是(java.lang.Object),any(),any(),any(groovy.lang.Closure),use([Ljava.lang.Object;)           在Main $ _main_closure1.doCall(hash_text.groovy:10)           在Main.main(hash_text.groovy:9)

2 个答案:

答案 0 :(得分:2)

你只有一个语法错误。而不是

println ${it}

使用

println it

println "${it}"

答案 1 :(得分:1)

不知道你是否有明确的理由这样做,但你不需要在groovy脚本中使用显式类。此外,还会在您的脚本中自动注入隐式test.groovy集合。

换句话说,将以下内容粘贴到println "ARGS: $args" println "CLASS: ${args.class}"

~> groovy test.groovy foo bar
ARGS:  [foo, bar]
CLASS: class [Ljava.lang.String;

给出以下执行结果:

args

其中类打印输出意味着隐式context?.let { val color = ContextCompat.getColor(it, R.color.colorPrimary) // ... } 变量的类型为String数组。