Grails 1.3.5はGroovy 1.7.5を使用しています。 Groovyのバージョンでは、GroovyScriptEngine.run(..)
は以下のメソッドを呼び出します:createScript(String, Binding)
- >loadScriptByName(String)
- >isSourceNewer(ScriptCacheEntry)
isSourceNewer(ScriptCacheEntry)
は(残念ながら、私はウェブ上で一致するソースファイルを見つけられませんでした)のように定義されます。
(奇妙な)ロジックを実装
protected boolean isSourceNewer(ScriptCacheEntry entry)
throws ResourceException {
// ...
for (String scriptName : entry.dependencies) {
// ...
return true; // without any further condition!
}
return false;
}
スクリプトが依存関係を持っている場合」、それはより新しいですキャッシュされたスクリプト(そして再コンパイルする必要があります) "。それはコードがするはずのものではありません。変更時間で決定するはずです。
newer versions of GroovyScriptEngine
, this has been corrected(ロジックが大幅に変更されました)が、現在はGroovyScriptEngine
をサブクラス化し、ロジックを自分で修正するにはisSourceNewer(ScriptCacheEntry)
を上書きする必要があります。
編集:バグがGroovyの1.7.6でreportedとfixedてきました。 - Grails libフォルダのGroovy 1.7.6を試してみてください。私が最後に使用
オブジェクトにXStreamのを使用してscriptCache変数をストリーミングすると戻ってそれを読んで、それを設定するには、このフラグは何をするかわからなかったが、問題はそのGroovyScriptEngine#ですisSourceNewerはScriptCacheEntryオブジェクトを使用します。その名前が示唆するように、それはキャッシュ(マップ)から来ます。 GroovyScriptEngineを作成すると、このマップは空です。エントリがないということは、isSourceNewerがtrueを返し、コンパイルをトリガすることを意味します – IttayD