繁体   English   中英

与 Require-Bundle 相比,我应该更喜欢 Dynamic-Import 吗?

[英]Should I prefer Dynamic-Import over Require-Bundle?

我应该更喜欢动态导入而不是 Require-Bundle 吗? 情况是我的 OSGi 包在 Java 代码net.sf.ehcache包类中导入,并使用配置文件引用了很少的其他类。 在我注意到错误/异常之后,我通过从Import-Package: net.sf.ehcacheRequire-Bundle: net.sf.ehcache解决了缺少类的问题。 但我想知道我是否应该添加Dynamic-Import: net.sf.ehcache.*除了Import-Package: net.sf.ehcache

OSGi 被设计为使用导入包。 如果您在使用 Import-Package 时遇到问题,那么您或您使用的包可能会遇到更深层次的模块化问题。 导入/导出包提供了最灵活、最不容易出错的模型。

我建议的第一件事是使用 bnd 来诊断您的设置有什么问题,听起来您正在手动编写清单? 如果是这样的话,我可以向你保证,你的未来会有很多问题。 使用 bnd(我最喜欢的是工作区模型,但您可以在 Gradle、Maven 和命令行中使用它)将使 OSGi 使用起来变得轻而易举。 你不应该在运行时发现问题,bnd 应该提前给你指出它们。

OSGi 拥有 Require-Bundle 的原因是 Eclipse 遗憾地坚持它,因为它类似于 2005 年他们现有的模块化解决方案。Require-Bundle 从所需的包中导入导出的包。 虽然这是一个广泛传播的模型,但问题是它对所需模型的变化非常敏感。 如果要重构任何东西,则需要做很多工作。 包导入/导出提供了更松散的耦合。 特别是如果您确保那些导出的包包含 API。

如果动态导入解决了您的问题,那么您最好不要使用 OSGi,因为它会在总线下抛出模块化。 你为框架和包支付了所有的钱,然后你基本上做类路径的事情:选择看起来像你正在寻找的东西。 OSGi 的大部分好处都将像太阳下的雪一样消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM