Создание системы плагинов в Java - PullRequest
8 голосов
/ 29 октября 2011

Я пытаюсь создать игру с использованием Java, и мне нужна система плагинов для сервера ...

Как сделать так, чтобы в папке с плагинами пользователи могли просто помещать туда файлы jar, и я мог вызывать функции из этих файлов jar сразу?

Это означает, что сообщество будет создавать плагины, о которых я не знаю (поэтому мне нужно, чтобы он запускал все плагины, даже если я не знаю названия плагинов)

(я был бы признателен, если бы мне не нужно было использовать чей-то фреймворк, такой как jspf)

1 Ответ

13 голосов
/ 29 октября 2011

Написание собственной инфраструктуры плагинов - это весело, но совершенно не нужно. Это решенная проблема, и вы не собираетесь писать более качественную, чем та, которая уже существует и проверена в данной области. Я бы сказал, выбери свои сражения.

Я уже пробовал JSPF и нашел его невероятно простым в использовании. И это от кого-то, кто сделал точно то, что вы пытаетесь сделать: я создал собственную инфраструктуру плагинов (в основном для той же цели: загружать мини-игры динамически) с нуля, пишу загрузку классов и фреймворк сам. И если бы я сделал это снова, я бы без колебаний использовал такую ​​среду, как JSPF.

Чтобы загрузить все классы из jar-файлов в каталоге, который придерживается определенного интерфейса (скажем, Game), это так же просто, как:

PluginManager pm = PluginManagerFactory.createPluginManager();
pm.addPluginsFrom(new File("plugins/").toURI());

Collection<Game> games = new PluginManagerUtil(pm).getPlugins(Game.class);

IIRC единственное требование к исполнителям Game заключается в том, чтобы он был помечен аннотацией @PluginImplementation.

Редактировать

А потом:

for ( Game game : games ) {
   game.someMethod();
}
...