2012-04-14 12 views
2

私はscalaからGroovyスクリプトを動的に実行していますが、Groovy Script EngineのloadScriptByNameメソッドを呼び出すときにGroovyスクリプトをコンパイルするのに時間がかかります。Groovy Script Engineでコンパイルされたクラスをどのようにキャッシュしますか?

アプリケーションからロードされコンパイルされたほとんどのGroovyスクリプトは、アプリケーションを最後に実行して以来変更されていないので、毎回コンパイルする必要はありません。

コンパイル済みのGroovyスクリプトを保存し、変更がない場合はアプリケーションから実行する方法はありますか?私はGroovyスクリプトエンジンのキャッシュをコンパイルしたスクリプトを知っています同じGroovyスクリプトでloadScriptBynNameメソッドを2回以上呼び出すと、アプリケーションを閉じるときにキャッシュが消えてしまいます。たぶん、キャッシュされたスクリプトをメモリに保存しているのでしょうか?

+1

GroovyScriptEngine店(https://github.com/groovy/groovy-core/blob/master/src/main/groovy/ util/GroovyScriptEngine.java#L99)。 –

答えて

2

使用:[scriptCache]という名前の変数にメモリ内のスクリプトをコンパイル

String script = ""  // some script 
string scriptName = "" // unique script name 

GroovyClassLoader groovyClassLoader = GroovyClassLoader() 
GroovyCodeSource gcs = new GroovyCodeSource(script, scriptName, "/app/script"); 
Class<?> executableClass = groovyClassLoader.parseClass(gcs, true);