OSGi包可以有两个依赖项,每个依赖项位于同一个OSGi包的不同版本上吗?
OSGi包可以有两个依赖项,每个依赖项在同一个OSGi包的不同版本上吗?
(我正在尝试从头开始学习OSGi。这个问题只是为了帮助我理解基本概念。通过阅读有关OSGi服务的在线文章,我认为这样的依赖肯定不会被推荐的做法。但是他们有可能吗?)
(更新:重新提出两个问题。)
答案 0 :(得分:7)
没有。 OSGi为bundle提供了一致的类空间。这意味着它只暴露给给定名称的单个类。因此,捆绑包不能同时看到一个包的多个版本。
这并不意味着ClassCastExceptions不可能,因为bundle直接依赖于它的代码,可以将对象从它们的依赖项暴露给你的bundle。在导出包上正确使用使用约束对于防止这种情况非常重要。
答案 1 :(得分:1)
OSGi包可以同时依赖于另一个OSGi包的两个不同版本吗? OSGi包可以同时依赖于另一个OSGi包的两个不同版本吗?
排序。您可以依赖于另一个OSGI包或包的范围或特定版本,如下所示:
Import-Package:org.osgi.framework; version =“[1.3,2.0)”
不确定这是否适用于第一部分,因为bundle不应该依赖于其他bundle,只能依赖于package。这就是'Require-Bundle'的作用,但建议您不要使用它。 Require-Bundle也需要版本,所以理论上它应该支持版本范围。
在OSGi中解析OSGi包后,它会找到任何这些版本的包。但是,它无法将包(org.osgi.framework)解析为两个单独的包(一个提供版本1.9,另一个提供1.8)。它将根据SemVer选择最新版本。
如果您尝试在Import-Package中指定它两次,则会出现“重复导入”错误。