1

我知道在 OSGI 包中使用外部库有两种方法。因为只有我的包需要 lib(例如 google-gson),所以我试图将它放在Bundle-ClassPath(manifest.mf)中。但是,每当我在 Knopflerfish 中运行捆绑包时,我都会得到Exception in thread "Thread-74" [stderr] java.lang.NoClassDefFoundError: com/google/gson/Gson.

由于我是 OSGI 的新手,所以我尝试按照说明从这里创建一个捆绑包,使用一个build.xml用于编译的地方,我还包含了 lib(不知道这是否正确)。所以这个库出现在三个不同的地方,项目类路径包类路径(manifest.mf)和build.xml

如果有人能给我提示如何使图书馆工作,我会很高兴。提前致谢!

4

2 回答 2

1

流程如下

1.将所有.jar文件及其依赖项复制到一个文件夹

2.mention it BUNDLE-CLASSPATHin MANIFEST.MF.Refer this

3.Importantly将此库中的添加到Export-package元素中,MANIFEST.MF以使其对其他捆绑包可见。

希望这可以解决您的问题

于 2013-02-26T09:12:48.457 回答
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 Installed but not started中。

希望这可以帮助

于 2016-08-25T10:11:26.453 回答