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