我希望为现有项目(Minecraft客户端)制作各种工具的插件,而且似乎最多建议OSGi,是否可以将OSGi插件添加到源代码中。 装入插件的Aka可以在游戏中做一些事情,例如让玩家跳跃,蹲下或向前移动。
我是否必须从头开始创建自己的插件系统?如果是这样,那么如何从一个现有的项目开始,如修改我的世界源代码
答案 0 :(得分:3)
OSGi 我们是一个插件系统。所以要回答你的问题,不,你不必自己创建一个。
如果您有一个现有的(Java)应用程序,添加OSGi是微不足道的,因为它在launching api中已标准化。几行代码就可以做到这一点。
也就是说,将现有应用程序链接到OSGi框架可能会更复杂一些。您必须将应用程序端的类型提供给OSGi框架中的 bundles 以及 services 。您必须通过框架导出包,并通过您创建的Framework对象的BundleContext注册服务。这可以做到但随着时间的推移非常麻烦。
更好的方法是在OSGi框架中将自己的代码作为捆绑包运行。只需按原样执行代码,将其包含所有非OSGi包的依赖项,并让bnd发挥其魔力。
我强烈建议您查看OSGi enRoute。不幸的是,OSGi的长寿意味着网络上有很多旧的教程明显错误或者完全缺乏随着时间推移而发现的最佳实践。虽然OSGi enRoute有时会有点迂腐,但它确实遵循我们在OSGi中所知道的如何开发bundle。最重要的教训是:
使用OSGi enRoute,您可以在下载Bndtools后启动并运行几分钟,包括在Travis上进行完全持续集成构建。您将找到许多教程,示例,应用说明和服务目录
如果你打算让这个Minecraft客户端开源,那么如果你使用OSGi enRoute我非常有兴趣帮助你,因为对于OSGi enRoute示例套件来说这将是一个非常好的example?不要在OSGi enRoute Forum上提出我的意见。
答案 1 :(得分:0)
我目前正在研究具有C ++端(UI)和Java端(90%的逻辑和使用OSGi)的混合应用程序,所以我可以给出一些建议。
如果你想使用OSGi,我建议使用Eclipse平台,因为你将获得比OSGi更多的东西(例如令人惊叹的扩展点/扩展注册表)。
使用Eclipse平台,您的代码中将包含与编码开始的标准java入口点void main(String[] args)
类似的内容。这是方法org.eclipse.equinox.app.IApplication. start(IApplicationContext context)。你可以根据需要实现这个方法,你不受任何限制,但你将拥有漂亮的OSGi运行时。
那么如何开始?
Eclipse version: 3.5 or greater
,没有rcp应用程序,没有对ui的贡献,没有模板)。 New->Other
并创建产品配置(选择之前创建的插件项目并使用单选按钮Create a configuration file with basic settings
。Launch an Eclipse application
链接运行您的应用。初学者很难理解,但随后您将更加熟悉OSGi和Eclipse平台的所有概念,在构建复杂的应用程序时,您将从中受益匪浅。
你可以在Lars Vogella http://www.vogella.com/tutorials/eclipse.html
的教程中阅读很多内容