2011-01-17 6 views
3

Ich versuche GroovyShell zu verwenden, um einige Codeschnipsel aus einer Grails-Anwendung auszuwerten, aber ich kann nicht auf unsere Grails-Domain-Klassen zugreifen. Zum Beispiel, wenn ich versuche, so etwas zu bewerten:Zugriff Grails Domain-Klasse von GroovyShell-Skript

Eval.me("my.package.MyDomainClass.get(1)") 

Ich sehe ein Fehler wie folgt aus:

groovy.lang.MissingPropertyException: No such property: my for class: Script1 

Irgendwelche Gedanken darüber, wie ich das bekommen kann zu arbeiten?

Danke.

+0

ist dies die GroovyShell Sie erhalten nach dem Laufen 'Grails Shell'? http://grails.org/doc/latest/ref/Command%20Line/shell.html –

+0

Ich meine die 'GroovyShell' Klasse - eine Klasse, die beliebigen groovigen Code auswerten kann: http://groovy.codehaus.org/api /groovy/lang/GroovyShell.html. 'Eval.me' (http://groovy.codehaus.org/api/groovy/util/Eval.html) ist eine praktische statische Methode, um eine Instanz dieser Klasse zu instanziieren und 'evaluate' darauf aufzurufen. –

Antwort

6

Ich habe herausgefunden, wie man das funktioniert. Standardmäßig wertet eine GroovyShell Instanz das Skript eindeutig in einem eigenen Classloader aus, sodass keine Ihrer Grails-Artefakte verfügbar sind. Es gibt eine Alternative Konstruktor, wo Sie in einem anderen Klassenlader passieren kann, so das tut, was ich im Rahmen einer Grails-Anwendung müssen (wenn sie in einem grails console, zum Beispiel Laufen):

def shell = new GroovyShell(this.class.classLoader) 
shell.evaluate("my.package.MyDomainClass.get(1)") 
+0

Danke für das Teilen! –

Verwandte Themen