gpt4 book ai didi

scripting - 在应用程序中使用 groovy 脚本的最佳方式

转载 作者:行者123 更新时间:2023-12-04 06:40:08 26 4
gpt4 key购买 nike

我正在尝试在我的应用程序中使用 groovy 脚本。问题是 GroovyScriptEngine#run 总是编译脚本,即使它是在以前的运行中编译的并且此后没有改变。即使我在配置中设置了一个物理输出文件夹来保存编译结果。

解决此问题的最佳方法是什么?对我来说最理想的是我可以发送带有包含预编译结果的文件夹的脚本并且不进行编译(除非脚本被修改)

最佳答案

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)自己修复逻辑。

编辑:错误是 reportedfixed在 Groovy 1.7.6 中。 - 所以尝试在您的 Grails lib 文件夹中使用 Groovy 1.7.6。

关于scripting - 在应用程序中使用 groovy 脚本的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4358601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com