【问题标题】:Eclipse OSGi fragment with Export-Package带有导出包的 Eclipse OSGi 片段
【发布时间】:2017-12-14 03:22:37
【问题描述】:

我有两个包,其中一个是两个片段的主机包,以及此包/片段之间的以下依赖关系。

  • Bundle A(导入 B.bpackage,导入 B1.b1package;导出 A.apackage)
  • 主机包 B(导出 B.bpackage)
  • 片段 B1(导出 B1.b1 包)
  • 片段 B2(导入 A.apackage)

在 Eclipse 中(我使用氧气,但在 neon3 上出现相同错误)存在无法解决从 A 导入到 B1.b1package 的错误。我读到使用 Eclipse-ExtensibleAPI: true (Eclipse Help Page) 行通过告诉 PDE 片段允许导出额外的包来解决这个问题(在运行时片段总是被允许这样做,设置只是 PDE 的信息)

但在使用此设置后,eclipse 抱怨我的依赖项中有一个循环,该循环在运行时不存在,因为片段 B2 依赖于包 A...

处理此类问题的正确方法是什么?

【问题讨论】:

    标签: java eclipse fragment osgi


    【解决方案1】:

    处理此类问题的正确方法是什么?

    从 OSGi 的角度来看,正确的做法实际上是将 API 类型完全分离(理想情况下为单独的包)并使用 OSGi 服务注册表进行互通。这可确保您在包依赖关系图中没有循环,并允许您在知道 API 没有更改的情况下轻松发布更新。声明式服务提供了一个简单的、基于注释的注入模型,PDE 可以为您处理。

    一个模型:

    • API Bundle A(导出包 A.apackage)
    • API Bundle B(导出包 B.bpackage、B1.b1package)
    • Impl Bundle A(导入所有三个包,提供 A.apackage.AService)
    • Impl Bundle B(导入 B.bpackage,提供 B.bpackage.BService)
    • Impl Bundle B1(导入 B1.b1package,提供 B1.b1pacakge.B1Service)
    • Impl Bundle B2(导入 A.apackage)

    可能更适合你。

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多