2017-07-10 53 views
1

我有兩個包,其中一個是兩個碎片的主機捆綁包,以及此捆綁包/碎片之間的以下依賴關係。帶導出包的Eclipse OSGi片段

  • 束A(輸入B.bpackage,進口B1.b1package;出口A.apackage)
  • 主機束B(出口B.bpackage)
  • 片段B1(出口B1.b1package)
  • 片段B2(進口A.apackage)

在蝕(我使用氧氣,但是,neon3相同誤差)有一個錯誤,從A到B1.b1package導入不能得到解決。我讀了用線Eclipse-ExtensibleAPI: true(Eclipse Help Page)解決了告訴PDE片段這個問題被允許出口額外的軟件包(在運行時的片段總是被允許這樣做,該設置是隻爲PDE的信息)

但在使用這個設置後,eclipse會報告我的依賴關係中的一個週期,這在運行時並不存在,因爲片段B2依賴於bundle A ...

處理這些問題的正確方法是什麼?

回答

1

處理這些問題的正確方法是什麼?

從OSGi的角度來看,正確的做法實際上是將API類型完全分開(理想情況下分爲單獨的捆綁包)並使用OSGi服務註冊表進行相互通信。這可以確保您在程序包依賴關係圖中沒有周期,並且可以讓您在知道API未更改的情況下輕鬆發佈更新。聲明式服務提供了一個簡單的,基於註釋的注入模型,PDE可以爲您處理。

與模型:

  • API包A(出口包A.apackage)
  • API包B(出口包B.bpackage,B1.b1package)
  • 默認地將Impl束A(所有進口三個包,提供A.apackage.AService)
  • 默認地將Impl束B(進口B.bpackage,提供B.bpackage.BService)
  • 默認地將Impl束B1(進口B1.b1package,提供B1.b1pacakge.B1Service)
  • Impl Bundle B2(進口A.apackage)

可能對您更好。