【发布时间】:2017-12-16 17:18:29
【问题描述】:
我正在尝试静态编译一个 groovy 脚本以加快它的执行速度,但如果使用命令行参数,我无法让它工作。我的实际脚本要长得多,但我用于这个问题的单行脚本完美地重现了我的错误。
使用以下脚本 (test.groovy)
println(args.length)
这可以使用命令groovyc test.groovy 编译并通过java 命令java -cp .;%GROOVY_HOME%\lib\* test 运行,并且将简单地打印所使用的命令行参数的数量。
现在,如果我提供脚本 (config.groovy)
withConfig(configuration) {
ast(groovy.transform.CompileStatic)
}
用groovyc -configscript config.groovy test.groovy编译,我得到一个错误
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
testing.groovy: 1: [Static type checking] - The variable [args] is undeclared.
@ line 1, column 9.
println(args.length)
^
1 error
此错误仅在我尝试静态编译时发生。我可以通过将脚本包装在一个类中并将我的代码放在一个 main 方法中来让它工作(当然,这是编译器对脚本所做的),但当我尝试只使用脚本时(这是我喜欢做什么)。由于某种原因,变量 args 在静态编译时是未知的。我试过this.args 但仍然收到错误。如果我尝试为 args (String[] args) 声明一个类型,它将不再接收命令行参数。
当脚本以这种方式静态编译时,有没有办法仍然获取命令行参数?
我在带有 Java 8 的 Windows 7 上使用 Groovy 版本 2.4.10。
【问题讨论】:
标签: groovy compilation command-line-arguments