На самом деле это довольно просто, используя простые средства Java:
Поскольку вы не хотите, чтобы пользователь настраивал путь к классам перед запуском приложения, я бы сначала создал URLClassLoader с массивом URL-адресов к файлам в каталоге вашего плагина. Используйте File.listFiles, чтобы найти все файлы плагинов, а затем File.toURI (). ToURL (), чтобы получить URL для каждого файла. Вы должны передать системный загрузчик классов (ClassLoader.getSystemClassLoader ()) в качестве родительского для вашего URLClassLoader.
Если в банках плагинов содержится файл конфигурации в META-INF / services, как описано в документации API для java.util.ServiceLoader, теперь вы можете использовать ServiceLoader.load (Plugin.class, myUrlClassLoader), чтобы получить загрузчик службы для интерфейс вашего плагина и вызовите iterator () для него, чтобы получить экземпляры всех сконфигурированных реализаций плагина.
Вы все еще должны предоставить свою собственную оболочку для этого, чтобы фильтровать возможности плагинов, но это не должно быть слишком большой проблемой, я полагаю.