如何在OSGI中使用带有嵌入式.so文件的jar

时间:2016-05-03 15:27:59

标签: java jar osgi

我正在尝试创建一个OSGI包,但由于我的一个依赖项而遇到了麻烦。

我正在制作一个应用程序,在Beaglebone Black上执行一些串行IO和GPIO。对于串行和GPIO,我正在使用库libbulldog。该库的一个jar文件包含.so文件中的本机代码。

我使用bnd-platform包装libbulldog库以从中生成OSGI包。

如果我使用这种方法,我在Apache Felix中运行应用程序时会遇到异常:

java.lang.ExceptionInInitializerError
    at test.BBB.core.BSSerial.setup_port(BSSerial.java:215)
    at test.BBB.core.BSSerial.<init>(BSSerial.java:28)
    at test.BBB.Activator.start(Activator.java:50)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
    at java.lang.Thread.run(Thread.java:745)
Caused by: io.silverspoon.bulldog.core.platform.IncompatiblePlatformException
    at io.silverspoon.bulldog.core.platform.Platform.createBoard(Unknown Source)
    at test.bs.sys.Setup.<clinit>(Setup.java:22)

在OSGI上下文之外使用库没有任何问题,但似乎我需要做一些额外的事情来使.so文件在与OSGI包一起使用时可以访问吗?

有问题的依赖jar看起来像这样:

|-META-INF
|  |- metadata
|
|-io.silverspoon.bulldog.beagleboneblack
|  |- Java code
|
|-lib
   |- bulldog-linux-native.beagleboneblack.so

如何使嵌入式.so文件在OSGI上下文中可用?

1 个答案:

答案 0 :(得分:0)

您需要在包含.so和System.loadLibrary调用的包的清单中添加适当的Bundle-NativeCode标头。