java使用OSGi创建可修改的应用程序
我一直在网上搜索一个关于我将要描述的内容的好教程的链接,但我还没有找到它。我希望这里已经有人知道在哪里可以找到它,并且可以在这里发布链接
我想知道如何使用OSGi/Equinox构建一个应用程序(游戏、业务或其他),允许以后添加未知内容的库
从我第一次使用Minecraft Forge开始,这个想法就让我着迷,我所要做的就是将jar放入mods目录,该目录可能被标识为类路径或其他什么
我第一次研究这个话题是在年。NET并在“System.AddIn”和“System.AddIn.Contract”库中找到合适的响应。这里有一个很好的教程:MSDN - Creating an Extensible Application。这很有效。您可以创建定义外接程序类型的接口和协定管道,然后只需将类库放到正确的目录中,就可以添加外接程序
我现在正在积极研究如何在Java中实现同样的功能,目前正在研究OSGi插件。然而,到目前为止,我遇到的所有示例都集中在设计时已知的捆绑包上。此外,还有关于“DynamicImport包”的对话,但我迄今为止看到的资源对此表示不满
所以问题是,是否有人知道某个资源讨论了一种方法,该方法用于动态发现和加载满足特定接口的未知捆绑包(类库)
# 1 楼答案
您正在寻找OSGi服务。在OSGi中,您可以在一个捆绑包中注册服务,并在另一个捆绑包中使用这些服务。您还可以跟踪出现在OSGi容器中的服务,并在它们满足您的需求时使用它们
网上有很多教程解释了如何使用OSGi服务。例如:http://www.knopflerfish.org/osgi_service_tutorial.html
举例说明如何使用它:
# 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项目