用Java创建插件系统

bla*_*kin 8 java plugins system

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

我怎么能这样做,以便有一个名为plugins的文件夹,用户可以简单地删除那里的jar文件,我可以一次调用这些jar文件中的函数?

这暗示一个社区会制作我不知道的插件(所以我需要让它运行所有插件,即使我不知道插件名称)

(如果我不需要像jspf一样使用别人的框架,我将不胜感激)

Mar*_*ers 13

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

我之前尝试过JSPF,发现它非常容易使用.这来自于一个完全按照你要做的事情的人:我已经从头开始创建自己的插件基础设施(基本上是为了同一目的:动态加载迷你游戏),自己编写类加载和框架.如果我再次这样做,我会毫不犹豫地使用像JSPF这样的框架.

要从符合特定接口的目录中的jar中加载所有类(比如说Game),它就像以下一样简单:

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

Collection<Game> games = new PluginManagerUtil(pm).getPlugins(Game.class);
Run Code Online (Sandbox Code Playgroud)

IIRC对实施者的唯一要求Game是用@PluginImplementation注释标记.

编辑

然后:

for ( Game game : games ) {
   game.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

  • @blazingkin:你不知道怎么写for循环?我会在答案中添加一个.抱歉,我没有看到你关于JSPF的问题的最后一点,但它真的非常简单易用.编写自己的插件基础结构比StackOverflow问题要大得多.它涉及编写自定义类加载器等. (4认同)