我正在尝试使用 java 制作游戏,我需要一个服务器插件系统...
我怎样才能有一个名为 plugins 的文件夹,用户可以简单地将 jar 文件放到那里,我可以同时调用这些 jar 文件中的函数?
这意味着社区会制作我不知道的插件(所以我需要让它运行所有插件,即使我不知道插件名称)
(如果我不需要像jspf这样用别人的框架就感激不尽了)
最佳答案
编写您自己的插件基础结构很有趣,但完全没有必要。这是一个已解决的问题,您不会编写比已经存在并在该领域得到验证的质量更高的问题。我会说选择你的战斗。
我试过了 JSPF之前发现它非常容易使用。这来自于完全做了你想做的事情的人:我从头开始制作了我自己的插件基础设施(出于基本相同的目的:动态加载迷你游戏) ,自己编写类加载和框架。如果再来一次,我会毫不犹豫地使用像 JSPF 这样的框架。
要从符合特定接口(interface)的目录中的 jars 加载所有类(比如 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();
}
关于java - 在 Java 中创建插件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7936730/