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