Как найти объявление класса из проанализированного скрипта groovy

#groovy #groovyshell

#groovy #groovyshell

Вопрос:

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 объявлению класса?

Спасибо

Ответ №1:

по умолчанию groovyshell использует собственный classloader для загрузки скрипта и вложенных классов.

итак, вы могли бы получить к нему доступ через classloader

 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')