我正在尝试使用第三方工具(即IBM Installation Manager)将Eclipse产品安装到现有的Eclipse安装中,但它失败并出现了几种类型的错误
CRIMA1054E:在现有Eclipse安装中安装捆绑包“org.eclipse.equinox.p2.repository.tools_2.0.1.R36x_v20100823”不符合现有版本的“[2.0.100,3.0.0]”版本容差捆绑“org.eclipse.pde.ui”
不幸的是,我无法透露有关受影响产品的任何细节,因此我想将此转化为更一般的问题。
在对Eclipse平台进行一些研究之后,我的理解是它是OSGi规范的关键特性之一,应该能够将同一个捆绑包(≘插件?)的多个版本安装到同一个环境中。如果包 org.eclipse.pde.ui 已经存在,我假设它的所需版本 [...]。p2.repository.tools 已经可用。
我的问题:为什么只是将该插件的另一个版本添加到环境中会出现问题?我对Eclipse和OSGi有什么严重错误吗?
附带问题:版本 2.0.1.R36 [...] 不应位于 [2.0.100,3.0.0] 无论如何?但是,这并不会影响我的主要问题,因为我有其他明显超出容忍度的例子。
一些初步的想法和理论
尽管Eclipse允许插件的并行版本,但某些插件仍然与其他版本的插件冲突。然而,我会期待更多的错误,例如“[...]。repository.tools_x与[...]。repository.tools_y不兼容,这是现有的bundle org.eclipse.pde.ui所需要的”
Eclipse不会阻止安装,而是由IBM Installation Manager阻止。它可能会进行一些内部依赖性检查,但是懒得考虑并行捆绑软件版本安装。
再次针对该特定产品:遗憾的是,该产品无法通过常规Eclipse软件安装机制获得。我还想避免手动将其放入我的Eclipse中,因为我依赖于定期更新,而这些只是通过IBM Installation Manager提供的。
答案 0 :(得分:3)
任何提供UI的Eclipse插件都必须将singleton指令设置为true。这意味着只有一个带有该符号名称的包可以在框架中,有关详细信息,请参阅http://wiki.osgi.org/wiki/Bundle-SymbolicName。
我在我的Eclipse(3.8)版本中检查了org.eclipse.equinox.p2.repository.tools包,我发现它确实有singleton = true。
你说:“2.0.1.R36 [...]在[2.0.100,3.0.0]里面”
情况并非如此,因为2.0.1是< 2.0.100。