Написание собственной инфраструктуры плагинов - это весело, но совершенно не нужно. Это решенная проблема, и вы не собираетесь писать более качественную, чем та, которая уже существует и проверена в данной области. Я бы сказал, выбери свои сражения.
Я уже пробовал 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();
}