语法 – 为什么在Groovy脚本中的@Grab声明后无法执行方法调用?

我正在尝试构建DSL并使用全局AST变换来实现.该脚本正在使用groovyc进行编译,但是我希望能够让用户使用Grab / Grape来拉取JAR,并将其作为groovy脚本立即执行.

然后,我发现我无法正确执行,因为脚本中有一个解析错误,如果在@Grab调用后没有方法声明或import语句.

以下是一个例子:

@Grab(group='MysqL',module='mysql-connector-java',version='5.1.6')

println "Hello World!"

它看起来应该有效,但它抱怨(这里是GroovyConsole Script输出):

startup Failed:
Script1.groovy: 4: unexpected token: println @ line 4,column 1.
   println "hello"
   ^

1 error

尝试不同的东西使它工作,像一个import语句:

@Grab(group='MysqL',version='5.1.6')
import groovy.lang.Object
println "Hello World!" ​

方法解密:

@Grab(group='MysqL',version='5.1.6')
def hello() {}
println "Hello World!"

这是解析器中的错误吗?

解决方法

抓斗只能作为 annotation to certain targets使用

@Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,ParaMETER,TYPE})

所以你需要注释这些东西之一(就像你看到的)

不幸的是,Java(并因此Groovy)没有办法出现在代码间的注释.

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...