2009-05-12 3 views
4

Ich versuche, Maven zu verwenden, um ein Projekt zu erstellen, das auf einem JNI-Wrapper um die OpenCV-Computer-Vision-Bibliothek beruht. Ich konnte den OpenCV-Wrapper hier "mavenisieren": http://ubaa.net/shared/processing/opencv/ mit FreeHEPs NAR Maven-Plugin, aber die Dokumentation für dieses Plugin fehlt etwas.Verwenden von Maven zum Erstellen/Bereitstellen/Verwenden von Projekten mit JNI

Ich konnte ein Projekt (imagedetect) erstellen, das vom OpenCV jni Projekt abhängt (ich rufe das OpenCVJava). imagedetect wird kompiliert, jedoch schlägt jedes Test-, Integrationstest- oder Paketziel mit einem Fehler bezüglich Bibliotheken fehl, die in java.library.path fehlen.

!!! required library not found : no OpenCV in java.library.path 
Verify that the java.library.path property is correctly set and 'libcxcore.so', 'libcv.so', 'libcvaux.so', 'libml.so', and 'libhighgui.so' are placed (or linked) in one of your system shared libraries folder 

Dies ist besonders frustrierend - der einzige Weg, ich weiß, dass dies irgendwie zu lösen, ist die .nar-Datei für die opencv Bibliotheken ausfindig zu machen, sie manuell zu extrahieren, stellen Sie die java.library.path, und rufen Sie dann der Befehl gnaraly java, um die Tests/Anwendung tatsächlich mit dem richtigen Klassenpfad/Bibliothekspfad auszuführen. Dies wird nicht funktionieren - insbesondere, wenn dieses Problem bei transitiven Abhängigkeiten bestehen bleibt.

Wie kann ich dieses Build/Test/Execute System sauberer machen? Ich bin nicht auf FreeHEP eingestellt, aber ich möchte bei Maven bleiben, da es unsere häufigsten Anwendungsfälle viel einfacher macht.

FreeHEP Nar-Plugin: http://java.freehep.org/freehep-nar-plugin/intro.html

+0

Haben Sie dieses mavenisierte opencv-Wrapper-Projekt auf einem Maven-Repo gehostet? Ich möchte diese Bibliothek benutzen. –

Antwort

4

bin ich mit FreeHEP nicht vertraut, aber wenn Sie Probleme haben, die java.library.path auf todsichere Einstellung Ihre Tests auszuführen, fand ich ein Beispiel an: http://buildanddeploy.com/node/14 Es ist ein bisschen involviert, um zu posten, aber zeigt, wie man maven dazu bringt, die nativen Bibliotheken in ein Verzeichnis zu kopieren, auf das Sie dann Ihren java.library.path richten. Ich habe mich in der Vergangenheit ähnlich verhalten.

Auch Blick auf den Fehler, mussten Sie LD_LIBRARY_ PATH setzen, um es zu beheben? Wenn ja, solltest du das auch in maven eintragen.

Hier ist ein Beispiel dafür, wie dies für todsichere eingestellt wird (von http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI): Maven-todsichere-Plugin einmal Ziel/tmplib java.library.tmpdir Ziel/tmplib

+0

Danke! (Ich weiß, das ist sehr, sehr spät) Der Codehaus-Link funktioniert super. – rcreswick

+0

Um dies zu verdeutlichen: Der CodeHaus-Link beschreibt eine Methode, bei der * LD * LIBRARY_PATH oder andere Umgebungsvariablen nicht gesetzt werden müssen. Das resultierende jar enthält alle kompilierten Bibliotheken und der aufrufende Code muss nichts über JNI wissen. – rcreswick

+0

Ich kann es nicht mit Maven3 arbeiten. – Apurv

Verwandte Themen