有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用OSGi创建可修改的应用程序

我一直在网上搜索一个关于我将要描述的内容的好教程的链接,但我还没有找到它。我希望这里已经有人知道在哪里可以找到它,并且可以在这里发布链接

我想知道如何使用OSGi/Equinox构建一个应用程序(游戏、业务或其他),允许以后添加未知内容的库

从我第一次使用Minecraft Forge开始,这个想法就让我着迷,我所要做的就是将jar放入mods目录,该目录可能被标识为类路径或其他什么

我第一次研究这个话题是在年。NET并在“System.AddIn”和“System.AddIn.Contract”库中找到合适的响应。这里有一个很好的教程:MSDN - Creating an Extensible Application。这很有效。您可以创建定义外接程序类型的接口和协定管道,然后只需将类库放到正确的目录中,就可以添加外接程序

我现在正在积极研究如何在Java中实现同样的功能,目前正在研究OSGi插件。然而,到目前为止,我遇到的所有示例都集中在设计时已知的捆绑包上。此外,还有关于“DynamicImport包”的对话,但我迄今为止看到的资源对此表示不满

所以问题是,是否有人知道某个资源讨论了一种方法,该方法用于动态发现和加载满足特定接口的未知捆绑包(类库)


共 (2) 个答案

  1. # 1 楼答案

    您正在寻找OSGi服务。在OSGi中,您可以在一个捆绑包中注册服务,并在另一个捆绑包中使用这些服务。您还可以跟踪出现在OSGi容器中的服务,并在它们满足您的需求时使用它们

    网上有很多教程解释了如何使用OSGi服务。例如:http://www.knopflerfish.org/osgi_service_tutorial.html

    举例说明如何使用它:

    • 指定一个接口
    • 每个插件包必须有一个接口的实现,该包将实例化的对象注册为OSGi服务
    • 您的技术包(可以有插件)跟踪实现该接口的所有OSGi服务
  2. # 2 楼答案

    将OSGi框架嵌入到应用程序中,然后动态加载要加载的OSGi bundle插件库的主要OSGi API是org.osgi.framework.launch.Framework。在本文中,你可能会发现我感兴趣的https://github.com/vorburger/ch.vorburger.minecraft.osgi/项目的源代码:它将ApacheFelix OSGi框架嵌入到Minecraft海绵模型中,并以OSGi捆绑包的形式动态加载额外的Minecraft模型——这正是你想要的?;-)具体来看一下OSGiFrameworkWrapper类。您也可以在没有OSGi的情况下使用java来实现这一点。lang.ClassLoader,或者使用我的https://github.com/vorburger/HoTea项目