syntax standalone Warum kann ich nach einer @Grab-Deklaration in einem Groovy-Skript keinen Methodenaufruf ausführen?



groovy standalone (1)

Das Erfassen kann nur als Anmerkung für bestimmte Ziele verwendet werden

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

Also müssen Sie eines dieser Dinge kommentieren (wie Sie sehen)

Es gibt leider keine Möglichkeit in Java (und damit Groovy) von Annotationen nur in der Mitte des Codes zu erscheinen.

Ich versuche, eine DSL zu bauen und eine globale AST-Transformation dafür zu verwenden. Das Skript kompiliert sich mit groovyc Ordnung, aber ich würde gerne in der Lage sein, einen Benutzer Grab / Grape verwenden zu lassen, um das JAR zu ziehen und es einfach als grooviges Skript ausführen zu lassen.

Ich habe dann festgestellt, dass ich es nicht richtig machen konnte, da es im Skript einen Parsing-Fehler gibt, wenn nach dem @Grab-Aufruf keine Methodendeklaration oder Importanweisung vorhanden ist.

Hier ist ein Beispiel:

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

println "Hello World!"

Es sieht so aus, als ob es funktionieren sollte, aber es beschwert sich (hier ist die Ausgabe des GroovyConsole-Skripts ):

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

1 error

Verschiedene Dinge ausprobieren funktioniert wie eine Import-Anweisung:

@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
import groovy.lang.Object
println "Hello World!" 

Oder eine Methode Deklaration:

@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
def hello() {}
println "Hello World!"

Ist das ein Fehler im Parser? In der Tat





abstract-syntax-tree