Что-то вроде того, на что, я думаю, вы нацелены ... Я создал плагин, который поставляет пользовательский артефакт (назовите его Foo ) и предоставляет скрипт, позволяющий разработчику создавать новые экземпляры (MyFoo, YourFoo), и у меня есть шаблон артефакта, расширяющий базовый класс (может реализовать интерфейс). Затем, когда Grails запускается, он находит все артефакты Foo, и в моем FooService у меня есть метод getFooList (), который просто возвращает «application.getFooClasses ()» ... в FooController я получаю этот список и передаю его в пользовательский интерфейс для заполнения выбора список. После того, как пользователь выбирает один по имени, FooService создает его с помощью
def clazz = ApplicationHolder.application.getFooClass(name)
myFoo = clazz?.newInstance()
Очевидно, что это не гарантирует, что найдена каждая реализация интерфейса или базового класса, но позволяет моему FooService выбирать пользователя из расширяемого списка реализаций.