【问题标题】: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)
可能更适合你。