使用不同版本

时间:2015-08-05 12:09:10

标签: java osgi osgi-bundle

我有几个插件的osgi项目 其中一个名为:

的插件
com.lilum.sr.util

和otheres插件使用此插件

插件:

  

com.lilum.sr.serveA

Require-Bundle: org.eclipse.core.runtime,
 com.lilum.sr.util="1.2.3"
  

com.lilum.sr.serveB

Require-Bundle: org.eclipse.core.runtime,
     com.lilum.sr.util="1.2.5"

你可以看到插件 com.lilum.sr.serveA 使用 com.lilum.sr.util 版本1.2.3

和插件 com.lilum.sr.serveB 使用 com.lilum.sr.util 版本1.2.5

当我部署它们时,都使用 com.lilum.sr.util 更高版本(1.2.5) 但我想强制 com.lilum.sr.serveA 使用 com.lilum.sr.util (1.2.3)

有什么方法可以做到吗?

我也尝试使用范围版本([1.2.3,1.2.4)) 但我得到错误无法解决com.lilum.sr.util_ [1.2.3,1.2.4) 似乎osgi只部署了高级版本

1 个答案:

答案 0 :(得分:0)

在OSGI中,版本的第三部分标识了"服务"或"补丁"发布。只有第一个和第二个标识API何时发生变化。因此,OSGI可能会将您的两个捆绑包视为API中的等效捆绑包并选择更好的"两者之一:应用了更多补丁的那个。

您应该更新主要版本号或次要版本号,以表明对您的捆绑包进行了API修改,然后它应该正常工作。如果您没有API更改,但只有实现细节发生更改,并且所有其他内容在您的两个包中都是等效的,则应该没有理由使用具有较低第三个段的那个。

另见https://wiki.eclipse.org/Version_Numbering

此外,如果您的包中包含要求它成为系统单例的元数据,那么无论如何您都无法在OSGI运行时中拥有多个元素。