Java 带有导出包的Eclipse OSGi片段

Java 带有导出包的Eclipse OSGi片段,java,eclipse,fragment,osgi,Java,Eclipse,Fragment,Osgi,我有两个bundle,其中一个是两个片段的主机bundle,这个bundle/片段之间有以下依赖关系 捆绑包A(导入B.B包,导入B1.B1包;导出A.A包) 主机捆绑包B(导出B.B包) 片段B1(出口B1.B1包装) 片段B2(导入A.A包) 在eclipse中(我使用了oxygen,但在neon3上出现了相同的错误),有一个错误是无法解析从A到B1.B1包的导入。我读到,使用行eclipseextensibleapi:true解决了这个问题,它告诉PDE允许片段导出额外的包(在运行时,

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

  • 捆绑包A(导入B.B包,导入B1.B1包;导出A.A包)
  • 主机捆绑包B(导出B.B包)
  • 片段B1(出口B1.B1包装)
  • 片段B2(导入A.A包)
在eclipse中(我使用了oxygen,但在neon3上出现了相同的错误),有一个错误是无法解析从A到B1.B1包的导入。我读到,使用行
eclipseextensibleapi:true
解决了这个问题,它告诉PDE允许片段导出额外的包(在运行时,片段总是允许这样做,设置只是PDE的一个信息)

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

处理这些问题的正确方法是什么

处理这些问题的正确方法是什么

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

具有以下特性的模型:

  • API包A(导出包A.A包)
  • API包B(导出包B.B包,B1.B1包)
  • Impl Bundle A(导入所有三个包,提供A.apapackage.AService)
  • Impl Bundle B(导入B.B包,提供B.B包.B服务)
  • Impl Bundle B1(导入B1.B1包,提供B1.b1pacakge.B1服务)
  • Impl Bundle B2(导入A.A包)
也许对你更有用