2015-10-13 29 views
2

所以我嘗試在我的項目中添加一個新的包。在Eclipse Equinox中一切都很完美,但Maven(Tycho)構建存在問題。我的軟件包在OSGi控制檯中可見,其狀態爲啓動,但在需要其服務時不會啓動。我可以從OSGi控制檯手動啓動軟件包,然後運行。之後我甚至可以重新啓動我的應用程序,它仍然有效。OSGi包在maven構建後始終具有'開始'狀態

當我進入bundles.info我可以看到這一行:

org.eclipse.orion.server.authentication.github,1.0.0.v20151013-0508,plugins/org.eclipse.orion.server.authentication.github_1.0.0.v20151013-0508.jar,4,false 

如果我改變末尾,則它也可以「假」到「真」。如何配置我的包默認情況下爲「真」?我的包(我們稱之爲A)背後的更大的故事是:它實現了一個在包B中定義的接口(因此A需要B)並在此接口下注冊一個服務。該服務在B中使用(B在運行前不知道A)。我聽說刪除這種循環依賴可能會有幫助,但我不想修改B以避免合併衝突。

+1

「Maven構建存在問題」:在Maven構建期間,您使用什麼來啓動容器?一個JUnit擴展插件還是一個Maven插件?什麼是你的框架的開端?什麼是你的捆綁的開始階段? –

+0

@BalazsZsoldos Maven使用Tycho並創建一個Equinox神器。項目中所有bundle的startlevel是4.但是,我不知道如何檢查框架的startlevel。 – w10d

回答

0

也許這不是一個真正的問題。這是Equinox的典型行爲。它顯示捆綁包開始直到另一個捆綁包實際需要該捆綁包提供的服務。因此,通常情況下,您可以忽略從equinox開始的狀態。

或者,您可以在felix上運行捆綁包,並將它們報告爲活動。

+0

你的意思是Equinox使用捆綁的Lazy激活策略? –

+0

是的。如果您切換到分點,您也可以在卡拉夫中觀察到這一點。當我第一次看到時,我感到非常困惑:-) –

+0

這很奇怪。我認爲這是違反規範。來自osgi.org:「一個沒有使用START_ACTIVATION_POLICY選項啓動的軟件包總是被激活。」如果軟件包處於「啓動」狀態,這意味着其激活方法正在運行或尚未被調用(由於惰性激活策略)。因此,某些OSGi服務可能無法使用,從而導致意外行爲。 –