Ich versuche, ein Java-Projekt in OSGi zu portieren. Dieses Projekt hängt von einigen JARs von Drittanbietern ab (librealsense JavaCPP presets). Ich benutze Eclipse für die Entwicklung.OSGi API-Versionskonflikt Ausnahmefehler
Ich habe die Konfiguration getestet mit einer Teilmenge von dem, was ich brauche und kläglich gescheitert. Der Code, den ich für den Test verwendet habe, ist folgendes:
package testinglibrariesplugin;
import org.bytedeco.javacpp.RealSense.*;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("Hello World!!");
try {
context context1 = new context();
device device = context1.get_device(0);
String devName = device.get_name().getString();
System.out.println(devName);
} catch(Exception e) {
System.out.println(e);
}
}
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye World!!");
}
}
Manifest.mf:
...
Bundle-ClassPath: src/bundletesting/ffmpeg-linux-x86_64.jar,
src/bundletesting/ffmpeg-linux-x86.jar,
src/bundletesting/ffmpeg-platform.jar,
src/bundletesting/ffmpeg.jar,
src/bundletesting/javacpp.jar,
src/bundletesting/javacv.jar,
src/bundletesting/librealsense-linux-x86_64.jar,
src/bundletesting/librealsense-linux-x86.jar,
src/bundletesting/librealsense-platform.jar,
src/bundletesting/librealsense.jar,
src/bundletesting/opencv-linux-x86_64.jar,
src/bundletesting/opencv-linux-x86.jar,
src/bundletesting/opencv-platform.jar,
src/bundletesting/opencv.jar,
.
build.properties:
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
src/bundletesting/ffmpeg-linux-x86_64.jar,\
src/bundletesting/ffmpeg-linux-x86.jar,\
src/bundletesting/ffmpeg-platform.jar,\
src/bundletesting/ffmpeg.jar,\
src/bundletesting/javacpp.jar,\
src/bundletesting/javacv.jar,\
src/bundletesting/librealsense-linux-x86_64.jar,\
src/bundletesting/librealsense-linux-x86.jar,\
src/bundletesting/librealsense-platform.jar,\
src/bundletesting/librealsense.jar,\
src/bundletesting/opencv-linux-x86_64.jar,\
src/bundletesting/opencv-linux-x86.jar,\
src/bundletesting/opencv-platform.jar,\
src/bundletesting/opencv.jar
Die JAR-Dateien die ich verwendet habe sind herunterladbar from my Github repo.
bekomme ich folgende Fehlermeldung:
Hello World!!
java.lang.RuntimeException: API version mismatch: librealsense.so was compiled with API version 1.12.1 but the application was compiled with 1.9.6! Make sure correct version of the library is installed (make install)
Da der Code nur Java arbeitet mit Ich muss annehmen, dass es ein Problem mit der Konfiguration in Eclipse/OSGi. Ich möchte diesen API-Mismatch ignorieren, aber ich bin nicht wirklich erfahren in dieser Umgebung und ich weiß nicht weiter. Wenn dies nicht der richtige Weg ist, um das Problem zu beheben, bitte sagen Sie mir.
Jede Hilfe wird geschätzt.
EDIT: Dies ist der Code, den ich in einer einfachen Java-Anwendung verwendet habe, und das funktioniert:
import org.bytedeco.javacpp.RealSense.*;
public class Main {
public static void main(String[] args) {
context context = new context();
device device = context.get_device(0);
String devName = device.get_name().getString();
System.out.println(devName);
}
}
Ausgang: Intel RealSense SR300
wie erwartet.
EDIT 2: Ich habe meine build.properties und Manifest-Dateien
Sind Sie sicher, dass dieses Problem mit OSGi zusammenhängt? Was passiert, wenn Sie Ihren Code von einer einfachen Hauptmethode in einer Java-Anwendung ausführen? –
Ich habe es versucht und es funktioniert einwandfrei ... – mattdibi
Haben Sie in beiden Fällen die gleichen API-Abhängigkeiten verwendet? –