OSGi捆绑包通过指定的捆绑包获取系统捆绑包

时间:2014-09-19 03:48:20

标签: osgi apache-karaf

我们的一个捆绑包在joda-time / 2.2.0上有'进口'但是当我启动时,它总是拿起Karaf系统文件夹中的joda-time / 1.6.2。我不确定怎么会发生这种情况?有没有办法告诉karaf不要选择我们指定的系统捆绑?请注意,我们将bundle删除到deploy文件夹以安装它们。

2 个答案:

答案 0 :(得分:1)

首先,请确保您确实需要此捆绑包的两个版本。是的,你可以做到这一点,但总的来说,除非你真的需要在你的应用程序中出现不同版本的bundle,否则请避免使用它。检查哪些包使用joda-time以及它们在Import-Package语句中指定的版本范围。

我不确定您是否知道这一点,但如果您导入了一个包,则总是,隐式或明确指定与您兼容的版本范围:

  • 如果您未指定任何版本,则可以有效地声明您与从零到无穷大的版本范围兼容。
  • 如果您只指定一个版本,则说明您与该版本以及高于此版本的任何内容兼容,直至无穷大。
  • 如果您指定了两个版本,则说明您与该范围兼容,并且您可以使用方括号或圆括号来表明是否包含或排除边框。

未明确指定范围被视为不良做法。 OSGi有一份关于语义版本控制的白皮书,可以更详细地解释这一点。

因此,请确保您了解使用joda-time的捆绑软件的版本,看看您是否只能部署一个joda-time实现,并确保您自己的捆绑包也使用与其兼容的版本范围。 / p>

答案 1 :(得分:0)

只需在导入的软件包之后添加您需要导入的版本。

Import-Package: org.xx.xx;version=1.5.0

参考this