【问题标题】:Evaluate large Groovy script in in GroovyShell在 GroovyShell 中评估大型 Groovy 脚本
【发布时间】:2013-10-16 09:27:47
【问题描述】:

我正在使用 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 代码?

【问题讨论】:

    标签: grails groovy groovyshell


    【解决方案1】:

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

    【讨论】:

    • 正如我在问题中提到的:我无法控制脚本,我从外部来源获取它
    • @moeTi 如果不能更改脚本,我认为您无能为力,这是 JVM 对方法大小的限制,并且该脚本进入了 Groovy 的 run 方法Script 基于类
    • 您可以在从外部源读取脚本后以自动方式拆分脚本。我认为这并不容易,蝙蝠由于 java 内在限制,我没有看到任何其他解决方案。
    • @tim_yates 是的,我实际上是这么想的……好吧,那我必须找到解决方法
    猜你喜欢
    • 2021-04-27
    • 2017-10-18
    • 2014-07-26
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多