2009-04-18 77 views
0

我想創建一個包裝另一個罐子的OSGi服務。我將該jar添加到項目,類路徑和二進制版本。我在Activator中註冊了服務,但是當使用bundle打電話給服務時,我在包裝jar上得到了一個java.lang.NoClassDefFoundError。有沒有人有任何想法我在這裏做錯了?OSGi服務包裝罐

在此先感謝。

回答

2

您是否正在導出消費者所需的軟件包以及所有需要的軟件包。消費者需要導入所有將被引用的東西。

作爲一個方面說明,以這種方式創建捆綁包在Eclipse中不適用於開發(適用於運行時)。如果您嘗試從另一個OSGi項目的jar中引用類或接口,IDE將無法解析任何內容,因爲它無法「查看」jar中的文件。該jar必須在bundle中進行擴展才能看到所有內容(在IDE中)。 Eclipse會基於導入和導出自動創建適當的類路徑引用以用於構建目的。如果沒有包中的jar文件,你將不得不顯式維護這個類路徑。

+0

我之前使用過的OSGi捆綁包中的lib jar,而不是一個服務委託給他們。我想我現在得到它 - 非常感謝! – javamonkey79 2009-04-20 17:13:28

0

您是否在清單中使用了Bundle-Classpath?爲什麼不使用bnd作爲現有的jar?

+0

是的,我正在使用Bundle-Classpath。我不使用bnd,因爲這是一個演示應用程序 - 它更多的是教學而不是實際使用。我想知道爲什麼這個問題與剛纔的問題相反。這是由於單獨的類路徑例如消費者無法看到提供者嵌入式lib jar嗎?還有別的嗎? – javamonkey79 2009-04-18 17:14:31

1

您的行爲可能有多種原因。爲了確保,我會檢查以下內容:

  • 假設你使用Eclipse檢查工作,如果你已列入清單編輯你的「生成」選項卡的罐子,以及指出,在這個非常罐子「Classpath」下的「Runtime」選項卡。

  • 創建的包:包含jar嗎?它是否有指向jar的「Bundle-ClassPath」頭文件,如:「Bundle-ClassPath:lib/myLibrary.jar ,.」 (最後一個需要包含來自包的根目錄的類 - 您的激活碼fi)

  • 確保jar實際上包含所有必需的依賴項,或者通過包裹包中的Import-Package標頭表示它們。 Eclipse有一個「導入嚮導」。前面提到的bnd工具也是這樣做的。希望有所幫助...

+0

我並沒有試圖通過構建所有的方式,我只是從Eclipse運行。然而,當我將它打包時,lib jar就在捆綁包中,並在清單中: Bundle-ClassPath:。,lib/the_jar_that_is_failing.jar 我在捆綁包上運行了安裝文件並更新了消費者jar。此時消費者的罐子沒有啓動。當我嘗試並開始它時,我得到異常。 我知道BND,但我希望瞭解我做錯了什麼,而不是'只是修復它':) – javamonkey79 2009-04-18 17:08:41