Я совершенно новичок в Groovy, поэтому надеюсь, что ответ не очевиден...
Допустим, у меня есть скрипт "Test.groovy":
class A {
def greet() {println "Hey there!"}
}
new A().greet()
И я оцениваю этот скрипт с помощью GroovyShell
(из Java):
new GroovyShell().evaluate(new File("Test.groovy"));
Я получаю ожидаемый результат:
Привет!
Теперь, когда я удаляю последнюю строку из сценария и вместо этого оцениваю ее в отдельном вызове evaluate()
, я получаю довольно неясное исключение.
"Test.groovy":
class A {
def greet() {println "Hey there!"}
}
Джава:
GroovyShell shell = new GroovyShell();
shell.evaluate(new File("Test.groovy"));
shell.evaluate("new A().greet()");
org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: нет подписи метода: A.main() применим для типов аргументов: ([Ljava.lang.String;) значения: [[]] Возможные решения: wait(), ожидание (длинное), любое (), поиск (), ожидание (длинное, целое), каждое (groovy.lang.Closure)
Еще смешнее, если я оставлю скрипт как есть и поменяю только часть Java, он работает отлично (получаю два "Привет!")