我正在尝试使用java制作游戏,我需要一个服务器的插件系统......
如何制作一个名为plugins的文件夹,用户可以直接删除jar文件,我可以同时调用这些jar文件中的函数?
这暗示一个社区会制作我不知道的插件(所以我需要让它运行所有插件,即使我不知道插件名称)
(如果我不需要像jspf一样使用其他人的框架,我将不胜感激)
答案 0 :(得分:13)
编写自己的插件基础架构很有趣,但完全不必要。这是一个已经解决的问题,你不会写出比已经存在并且在现场证明的更高质量的问题。我会说你选择你的战斗。
我之前尝试过JSPF,发现它非常容易使用。这来自那些已经完成完全你想要做的事情的人:我已经制作了自己的插件基础设施(基本上是为了同一目的:从动态加载迷你游戏) ,自己编写类加载和框架。如果我再次这样做,我会毫不犹豫地使用像JSPF这样的框架。
要从符合特定界面的目录(例如Game
)中加载jar中的所有类,它就像以下一样简单:
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();
}