OSGi需求能力和第谷

时间:2014-03-17 09:19:03

标签: osgi tycho

我创建了一个eclipse插件,需要在其清单中具有某种功能:

Require-Capability: osgi.service;filter:="(osgi.service=my.client.SessionService)"

我的目标平台包含另一个提供此功能的捆绑包。当我尝试用Tycho构建它时,我得到以下异常:

[ERROR] Internal error: java.lang.RuntimeException: org.osgi.framework.BundleException: Bundle my.client.rxp cannot be resolved
[ERROR] Resolution errors:
[ERROR] Bundle my.client.rxp - Missing Constraint: Require-Capability: osgi.service; filter="(osgi.service=my.client.SessionService)"

似乎Tycho无法处理OSGi功能。一旦我添加了作为必需的包到我的eclipse插件的功能的包,一切正常。但这没有任何意义,因为eclipse插件不应该依赖于另一个实现包。 如何在Tycho构建中使用OSGi功能?

2 个答案:

答案 0 :(得分:0)

这很可能是由p2中的错误造成的:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=313553

Tycho使用它来解决依赖关系。

答案 1 :(得分:0)

感谢jsievers,他提供了正确的eclipse错误条目。在错误条目中,有一个指向Customizing p2 Metadata article的链接。简而言之,要让p2正确处理功能,你必须通过编写p2建议文件(p2.inf)来提供功能建议。

我必须执行以下操作来修复上述问题中描述的功能解决方案。在提供功能的捆绑包中,必须有一个META-INF / p2.inf文件,其中包含以下内容:

provides.0.namespace = osgi.serviceloader
provides.0.name = my.client.SessionService

需要功能的捆绑包中,必须有一个META-INF / p2.inf文件,其中包含以下内容:

requires.0.namespace = osgi.serviceloader
requires.0.name = my.client.SessionService

在文章中可以找到更多功能建议选项。