У меня есть много отличных скриптов, скомпилированных с помощью GMaven (находится в src/main/groovy/somepackage
), каждый скрипт имеет run(String, String)
функцию и не имеет класса:
// script1.groovy
def run(String name, String arg) {
// body
}
// script2.groovy
def run(String name, String arg) {
// body
}
Я могу найти их с помощью библиотеки Reflections и разрешить их типы:
final Set<String> scripts = new Reflections(
"somepackage",
new SubTypesScanner(false)
).getAllTypes();
for (String script : scripts) {
run(Class.forName(name));
}
тогда у меня есть некоторые проблемы с выполнением: я не могу создать экземпляр сценария, потому что у него нет общедоступного конструктора (есть только частный с параметрами groovy.lang.Reference
), и я не могу найти метод run
в этом типе.
Вопрос: как правильно выполнить скомпилированный скрипт groovy (с одним методом и без класса) из Java с использованием отражения?