【问题标题】:OSGi - Is it possible to override a bundle's import package version using a fragment?OSGi - 是否可以使用片段覆盖包的导入包版本?
【发布时间】:2013-02-03 14:12:23
【问题描述】:

我有一个包 (jersey-server),它导入一个包 (org.objectweb.asm),分辨率为可选且未指定版本:

org.objectweb.asm;resolution:=optional

目前,我们的应用程序部署到 Apache Karaf(使用 Equinox 框架),它导出了这个包的新版本 (org.objectweb.asm),即 4.0 版。我试图解决的问题是,由于 jersey-server 捆绑包没有为它连接到 4.0.0 的包指定版本。但是,我使用的 jersey-server 版本(1.12)与此版本不兼容。我在需要 jersey-server 捆绑包连接的容器中有一个可用的 3.1 版本的包。

我尝试使用片段来满足我的需要,但它似乎不起作用。我不完全了解片段导入包冲突解决在 Equinox(或 Felix)中的工作原理,以了解我正在尝试做的事情是否可能。也许还有其他方法?

【问题讨论】:

    标签: osgi equinox apache-karaf


    【解决方案1】:

    不,片段只是相加的。 IE。他们可以向其主机包添加额外的导入,但不能替换或删除主机的导入。

    jersey-server 捆绑包已损坏,必须修复。

    【讨论】:

    • 我担心是这样的。在我的搜索中,我看到了有关片段解析的实现细节的各种信息,并希望我能解决这个问题。我想我只需要用我自己的清单创建一个新的 jersey-server 包......
    • @AchimNierbeck 好吧,只有当您幸运地使用正确版本的依赖项部署它时,它才会起作用。哪种方式违背了 OSGi 的目的......您不妨只使用类路径 ;-)
    • @NeilBartlett,它工作得很好,看看这个片段的依赖关系:github.com/ops4j/org.ops4j.pax.web/blob/master/pax-web-features/… 它将“开放”版本范围更改为严格版本,并删除了可选的旗帜。至于 Pax-Web,这需要与较新版本的 Karaf(已经包含 ASM 4 ;)一起工作)
    【解决方案2】:

    我在 pax-web 上遇到了类似的问题,我为它创建了一个“解决方法”:

    https://github.com/ops4j/org.ops4j.pax.web/tree/master/pax-web-features/xbean-fragment

    它也可以通过 maven 获得: http://search.maven.org/#artifactdetails%7Corg.ops4j.pax.web%7Cxbean-fragment%7C3.0.0.M2%7Cbundle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2019-10-20
      • 2019-04-22
      • 2019-12-01
      • 2017-12-14
      • 2015-01-08
      • 2020-07-19
      相关资源
      最近更新 更多