java - 在 Java 中创建插件系统

标签 java plugins system

我正在尝试使用 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/

相关文章:

c# - .NET 进程监视器

delphi - 如何阻止调试器进入delphi给定单元

java - 在另一个类方法中调用小程序

java - 在 Java 中捕获通用异常?

node.js - 尝试运行 React 应用程序时获取 "Html Webpack Plugin: Error: Child compilation failed: Module.createRequire is not a function"

c# - 有谁知道 System 或 System.Core 中比较运算符的 .NET 枚举?

java - p4 更改为 P4Java 的等效项

c# - 我用来制作 .zip 文件的代码正确吗?

ios - Flutter iOS 存档版本在 Xcode 中获取 'xx plugin.h' 文件未找到错误

java - SonarQube IntelliJ 插件如何对新代码运行检查