2016-05-03 2 views
1

Ich versuche, ein OSGI-Paket zu machen, aber wegen einer meiner Abhängigkeiten in Schwierigkeiten geraten.Wie man jar mit eingebetteter .so-Datei in OSGI verwendet

Ich mache eine Anwendung, die einige serielle IO und GPIO Zeug auf einem Beaglebone Black macht. Für die serielle und GPIO verwende ich die Bibliothek libbulldog. Eine der JAR-Dateien der Bibliothek enthält nativen Code in einer SO-Datei.

Ich wickle die libbulldog-Bibliothek mit bnd-Plattform, um daraus ein OSGI-Paket zu machen.

Wenn ich diesen Ansatz verwenden, erhalte ich eine Ausnahme, wenn der Lauf der Anwendung in Apache Felix versucht:

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) 

Verwenden der Bibliothek außerhalb eines OSGi Zusammenhang keine Probleme ergibt, aber es scheint, ich brauche etwas zu tun extra, um die .so-Datei zugänglich zu machen, wenn sie mit OSGI-Bundles verwendet wird?

Die Abhängigkeit Glas in Frage wie folgt aussieht:

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

Was getan werden soll, die eingebettet zu machen in einem OSGi-Kontext .so-Datei verwendbar?

Antwort

0

Sie müssen dem Manifest des Bundles, das den Aufruf .so und System.loadLibrary enthält, einen entsprechenden Header Bundle-NativeCode hinzufügen.

Verwandte Themen