首页 > 解决方案 > 如何从已解析的 groovy 脚本中查找类声明

问题描述

TL;DR:如何访问在动态解析的 groovy 脚本中定义的类?

假设我有一个像这样的 groovy 脚本:

def foo(){ print "foo" }

def bar(){ print "bar" }

class Baz {
    def waz(){
        print "Baz#waz"
    }
}

...我可以将其解析为这样的 Script 对象:

Script myScript = new GroovyShell().parse(new File("my_script.groovy"))

然后我知道我可以访问这些功能:

myShell.foo()
myShell.bar()

但是我怎样才能访问Baz类声明呢?

谢谢

标签: groovygroovyshell

解决方案


默认情况下,groovyshell 使用自己的类加载器来加载脚本和嵌套类。

所以,你可以通过类加载器访问它

def script = '''
def foo(){ print "foo" }

def bar(){ print "bar" }

class Baz {
    def waz(){
        print "Baz#waz"
    }
}
'''
def gshell = new GroovyShell()
Script myScript = gshell.parse(script)
myScript.foo()

println gshell.getClassLoader().loadClass('Baz')

推荐阅读