我应该更喜欢动态-进口而不是需求-捆绑?情况是,我的OSGi包导入了类,并且很少使用配置文件引用其他类。在注意到错误/异常之后,我通过将Import-Package: net.sf.ehcache改为Require-Bundle: net.sf.ehcache来解决缺少类的问题。但我想知道我是否应该在Dynamic-Import: net.sf.ehcache.*之外添加Import-Package: net.sf.ehcache
发布于 2021-10-26 15:26:52
OSGi被设计为使用.如果您对Import有问题,您或您使用的包可能在模块化方面有更深层次的问题。导入/导出包提供了最灵活、最容易出错的模型。
我建议的第一件事是使用bnd来诊断您的设置有什么问题,听起来您是在手动编写清单吗?如果是这样的话,我可以向你保证,在你的未来会有很多问题。使用bnd (我最喜欢的是工作区模型,但您可以在Gradle、Maven和命令行中使用它)将使OSGi很容易使用。您不应该在运行时中发现问题,bnd应该提前向您指出这些问题。
OSGi之所以需要-Bundle,是因为Eclipse很遗憾地坚持使用它,因为它在2005年很像他们现有的模块化解决方案。required - bundle从所需的包中导入导出的包。虽然这是一个广泛传播的模型,但问题是它对所需模型的更改非常敏感。如果有什么是重构的,你需要做大量的工作。包导入/导出提供了更宽松的耦合。特别是如果您确保这些导出的包只包含API。
如果动态导入解决了您的问题,那么最好不要使用OSGi,因为它将模块化抛到总线下面。您为框架和包支付了所有的钱,然后基本上完成了类路径的操作:首先看上去像您正在寻找的东西。OSGi的大部分好处将会消失,就像雪对太阳一样。
https://stackoverflow.com/questions/69710547
复制相似问题