我正在尝试构建一种DSL,并使用全局AST转换来完成。使用groovyc
编译脚本没有问题,但是我想让用户使用Grab/Grape来拉取JAR,然后立即像Groovy脚本一样执行。
但我发现,如果在@Grab调用后没有方法声明或导入语句,就会出现解析错误,无法正确执行。
以下是一个示例:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
println "Hello World!"
看起来应该可以工作,但它报错了(这里是GroovyConsole脚本的输出):
startup failed:
Script1.groovy: 4: unexpected token: println @ line 4, column 1.
println "hello"
^
1 error
尝试不同的方法可以使其正常工作,比如使用一个导入语句:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
import groovy.lang.Object
println "Hello World!"
或者是一个方法声明:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
def hello() {}
println "Hello World!"
这是解析器的一个bug吗?
import groovy.lang.Object
会出现“无法解析类”的错误。我改成了java.lang.Object
。 - mike rodent