在GroovyShell中评估大型Groovy脚本

时间:2013-10-16 09:27:48

标签: grails groovy groovyshell

我正在使用GroovyConsole来评估从外部源获取的脚本。所以要评估的代码是动态的,我无法控制它。实际上是写入数据库,我必须将其作为字符串读取。不完美,但就是这样。

我现在在做什么:

private GroovyShell shell

def processScript( def script){
    if (script) {
        try{
            shell.evaluate (script, 'some_random_name')
        }catch( e ){
            log.warn "Could not process script: $e"
        }
    }   
}

这通常有效。但是现在我们得到了一个大脚本(~3000 LOC)并抛出java.lang.RuntimeException: Method code too large!因为脚本大于64K。

我尝试将脚本转储到文件中并使用BufferedReader,但它会抛出相同的异常。

那么有更好的方法可以在Groovy方法中评估动态Groovy代码吗?

1 个答案:

答案 0 :(得分:1)

问题是您的脚本达到了方法的java限制。我认为唯一的解决方案是以某种方式在许多脚本中拆分脚本。 See this answer