grails - 在GroovyShell中评估大型Groovy脚本

标签 grails groovy groovyshell

我正在使用GroovyConsole评估从外部来源获得的脚本。因此要评估的代码是动态的,我无法控制它。实际上是写到数据库中的,我必须以String的形式读取它。并不完美,但这就是事实。

我现在正在做什么:

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),并且由于该脚本大于64K,它会抛出java.lang.RuntimeException: Method code too large!

我试图将脚本转储到文件中并使用BufferedReader,但是它引发了相同的异常。

那么,是否有更好的方法可以从Groovy方法中评估动态Groovy代码?

最佳答案

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

关于grails - 在GroovyShell中评估大型Groovy脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19399718/

相关文章:

templates - Grails:将 taglib 中的模板渲染为 HTML

Grails 和发布插件

groovy - 用于处理给定目录中所有文件的 Nextflow 脚本

groovy 初学者 - 如何在 groovy shell 中从内存中删除变量

java - 如何获取Hibernate Query的ResultSet中的浮点值?

grails - 如何在 grails 中编写 accessDeniedHandler

groovy - 是否可以在不声明类的情况下创建对象?

groovy - 在星云测试下运行的自定义Gradle任务无法查看创建的目录

java - 如何从 jar 文件中加载 groovy 脚本?

java - 如何使用 Groovy 脚本从给定目录获取所有 *.sln 文件?