代码之家  ›  专栏  ›  技术社区  ›  sebplorenz

OSGi需要能力和Tycho

  •  0
  • sebplorenz  · 技术社区  · 10 年前

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

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

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

    [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 回复  |  直到 10 年前
        1
  •  0
  •   jsievers    10 年前

    这很可能是由p2中的错误引起的:

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

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

        2
  •  0
  •   sebplorenz    10 年前

    感谢jsievers,他提供了正确的eclipse bug条目。在错误条目中有一个指向 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
    

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