2011-01-17 14 views
3

GroovyShellを使用してGrailsアプリケーション内のコードスニペットを評価しようとしていますが、Grailsドメインクラスにアクセスできないと思われます。私はこのような何かを評価しようとすると、例えば:私はこの作業を取得する方法についてGroovyShellスクリプトからGrailsドメインクラスにアクセス

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

任意の考え:

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

を私はこのようなエラーを参照してください?

ありがとうございました。

+0

は、あなたが実行した後に取得このGroovyShellです'grails shell'? http://grails.org/doc/latest/ref/Command%20Line/shell.html –

+0

私は 'GroovyShell'クラスを意味します。これは任意のgroovyコードを評価できるクラスです:http://groovy.codehaus.org/api /groovy/lang/GroovyShell.html。 'Eval.me'(http://groovy.codehaus.org/api/groovy/util/Eval.html)は、そのクラスのインスタンスをインスタンス化し、そのクラスに対して' evaluate'を呼び出すための便利な静的メソッドです。 –

答えて

6

この仕組みを理解しました。デフォルトでは、GroovyShellインスタンスは独自のクラスローダーでスクリプトを明確に評価するので、Grailsのアーティファクトはどれも使用できません。そこには、別のクラスローダに渡すことができます代替コンストラクタですので、これは(例えば、grails console内で実行されている)私はGrailsのアプリケーションのコンテキスト内で必要なものを行います。

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

これをお寄せいただきありがとうございます! –

関連する問題