我有几个插件的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只部署了高级版本
答案 0 :(得分:0)
在OSGI中,版本的第三部分标识了"服务"或"补丁"发布。只有第一个和第二个标识API何时发生变化。因此,OSGI可能会将您的两个捆绑包视为API中的等效捆绑包并选择更好的"两者之一:应用了更多补丁的那个。
您应该更新主要版本号或次要版本号,以表明对您的捆绑包进行了API修改,然后它应该正常工作。如果您没有API更改,但只有实现细节发生更改,并且所有其他内容在您的两个包中都是等效的,则应该没有理由使用具有较低第三个段的那个。
另见https://wiki.eclipse.org/Version_Numbering
此外,如果您的包中包含要求它成为系统单例的元数据,那么无论如何您都无法在OSGI运行时中拥有多个元素。