2013-02-26 31 views
1

我知道在OSGI包中使用外部庫有兩種方法。由於只有我的軟件包需要lib(例如google-gson),我試圖將它放在Bundle-ClassPath(manifest.mf)中。但是每當我在Knopflerfish中運行這個包時,我都會得到Exception in thread "Thread-74" [stderr] java.lang.NoClassDefFoundError: com/google/gson/GsonKnopflerfish,在包中使用外部庫

因爲我是OSGI的新手,我試圖按照說明從here創建一個包,使用build.xml進行編譯,其中我還包括lib(不知道這是否正確)。所以庫出現在三個不同的地方,項目類路徑,捆綁類路徑(manifest.mf)和build.xml

如果有人能給我提示如何讓圖書館工作,我會很高興。提前致謝!

+0

最後我選擇了第二種方法,並從google-gson創建了一個OSGI包。所以我不需要關心將圖書館納入我的包中。其他一切都不起作用:( – nyyrikki 2013-02-26 13:43:29

回答

1

MANIFEST.MF如下

1.複印所有.jar文件及其依賴的一個文件夾

2.mention它BUNDLE-CLASSPATH .Refer this

過程3.Importantly添加Export-package元素MANIFEST.MF,以使其他包可見。

希望這會解決您的問題

+0

對不起,您的答案確實不適合我。 – nyyrikki 2013-02-26 13:44:00

0

一些提示,可以幫助和工作對我來說:

  • 捆的MANIFEST.MF可以有一個像Import-Package: org.osgi.framework線。在該行中,您應該添加從庫中導入所需的包,因此它仍然是Import-Package: org.osgi.framework, com.google.gson
  • 正如TheWhiteRabbit在其答案中所述,庫應該有一個像Export-Package: its.sec.api.service這樣的出口行,所以其他捆綁包可能會看到它。已經編譯和打包的庫通常已經安裝好了,但是我發現有一些不太適合檢查它。

還記得外部庫可以開始的init.xargs - install jars/myLib/myLibrary.jar安裝,但不被安裝到框架,好像它是束,即。

希望這會有所幫助