带有Export-Package

时间:2017-07-10 11:49:58

标签: java eclipse fragment osgi

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

  • 捆绑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抱怨我的dependecies中的一个循环在运行时不存在,因为片段B2依赖于bundle A ......

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

1 个答案:

答案 0 :(得分:1)

  

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

从OSGi的角度来看,正确的做法是将API类型完全分离(理想情况下分成单独的bundle)并使用OSGi服务注册表进行相互通信。这可以确保您在包依赖关系图中没有周期,并且允许您在知道API未更改的情况下轻松发布更新。 Declarative Services提供了一个简单的,基于注释的注入模型,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(Imports B1.b1package,提供B1.b1pacakge.B1Service)
  • Impl Bundle B2(Imports A.apackage)

可能对您有用。