【问题标题】:Creating a Plugin System in Java在 Java 中创建插件系统
【发布时间】:2011-12-17 17:08:51
【问题描述】:

我正在尝试使用 java 制作游戏,我需要一个用于服务器的插件系统...

我怎样才能做到有一个名为 plugins 的文件夹,用户可以简单地将 jar 文件放在那里,我可以一次调用这些 jar 文件中的函数?

这意味着社区会制作我不知道的插件(所以即使我不知道插件名称,我也需要让它运行所有插件)

(如果我不需要使用像jspf这样的其他框架,我将不胜感激)

【问题讨论】:

  • 虽然接受的答案很棒,但我个人非常感谢另一个不使用框架的答案。这样做的原因是(1)我想了解这是如何完成的,并且(2)可能有一个实例我需要 JSPF 不提供的东西。

标签: java plugins system


【解决方案1】:

编写自己的插件基础架构很有趣,但完全没有必要。这是一个已解决的问题,你不会写出比已经存在并在现场得到证明的质量更高的问题。我会说选择你的战斗。

我之前尝试过JSPF,发现它非常易于使用。这来自一个完全完成了你想做的事情的人:我从头开始制作了自己的插件基础架构(出于基本相同的目的:动态加载迷你游戏) ,自己编写类加载和框架。如果我再做一次,我会毫不犹豫地使用 JSPF 之类的框架。

要从遵循特定接口的目录(比如Game)中的 jars 加载所有类,很简单:

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();
}

【讨论】:

  • @blazingkin:你不知道怎么写for循环?我会在我的答案中添加一个。抱歉,我没有看到您关于 JSPF 的问题的最后一点,但老实说,它的使用非常简单。编写自己的插件基础设施是一项比 StackOverflow 问题要大得多的任务。它涉及编写自定义类加载器等。
  • 很抱歉,您的帖子真的很有帮助,由于某种原因,它显示为刚刚说使用 JSPF 的其他内容(您是否对其进行了编辑或其他什么?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多