Подтвердить что ты не робот

Почему я не могу выполнить вызов метода после объявления @Grab в Groovy script?

Я пытаюсь создать DSL и использовать Global AST Transform для этого. script компилируется с groovyc отлично, но я бы хотел иметь возможность использовать Grab/Grape для использования JAR и просто выполнить его сразу как groovy script,

Затем я обнаружил, что не могу сделать это правильно, потому что в script возникает ошибка синтаксического анализа, если после вызова @Grab не существует декларации или импорта метода.

Вот пример:

@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

Попытка разных действий заставляет его работать, как оператор импорта:

@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!"

Является ли это ошибкой в ​​синтаксическом анализаторе?

4b9b3361

Ответ 1

Захват может применяться только как аннотация для определенных целей

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

Итак, вам нужно аннотировать одну из этих вещей (например, вы видите)

К сожалению, в Java (и, следовательно, Groovy) комментариев, которые появляются в середине кода, к сожалению, нет.