2009-05-12 12 views
4

J'essaie d'utiliser maven pour créer un projet qui dépend d'un wrapper JNI autour de la bibliothèque de vision par ordinateur OpenCV. J'ai été capable de "créer" le wrapper OpenCV ici: http://ubaa.net/shared/processing/opencv/ en utilisant le plugin NAR maven de FreeHEP, mais la documentation pour ce plugin manque quelque peu.Utilisation de maven pour créer/déployer/utiliser des projets avec JNI

J'ai été capable de créer un projet (imagedetect) qui dépend du projet OpenCV jni (j'appelle cela OpenCVJava). imagedetect va compiler, cependant, tout test, test d'intégration ou paquet cible échoue avec une erreur sur les bibliothèques manquantes dans java.library.path.

!!! 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 

Cela est particulièrement frustrant - la seule façon que je connaisse pour résoudre c'est de suivre en quelque sorte sur le fichier .nar pour les bibliothèques OpenCV, les extraire manuellement, définissez le java.library.path, puis invoquez la commande gnaraly java pour exécuter réellement les tests/applications avec le chemin de chemin de classe/bibliothèque correct. Cela ne va pas fonctionner - en particulier si ce problème persiste à des dépendances transitives.

Comment rendre ce système de construction/test/exécution plus propre? Je ne suis pas sur FreeHEP, mais je voudrais rester fidèle à maven, car cela simplifie beaucoup nos cas d'utilisation les plus courants.

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

+0

Avez-vous ce projet wrapper opencv Mavenized hébergé sur un repo Maven? Je voudrais utiliser cette bibliothèque. –

Répondre

4

Je ne suis pas familier avec FreeHEP, mais si vous éprouvez des difficultés pour configurer le java.library.path sur surefire pour exécuter vos tests, j'ai trouvé un exemple à: http://buildanddeploy.com/node/14 C'est un peu compliqué à publier, mais montre comment obtenir maven pour copier les libs natives dans un répertoire que vous pointez ensuite sur java.library.path. J'ai déjà utilisé une approche similaire par le passé.

Toujours en regardant l'erreur, avez-vous besoin de définir LD_BIBRARY_ PATH pour le réparer? Si c'est le cas, vous devriez également avoir ce set dans maven.

Voici un exemple de la façon de mettre pour surefire (de http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI): maven-plugin-Surefire une fois cible/tmplib java.library.tmpdir cible/tmplib

+0

Merci! (Je sais, c'est très, très en retard) Le lien de codehaus fonctionne très bien. – rcreswick

+0

Pour clarifier pour quiconque lisant ceci: le lien CodeHaus décrit une méthode qui * ne nécessite * pas la définition de LD_LIBRARY_PATH, ou toute autre variable d'environnement. Le fichier jar résultant contient toutes les bibliothèques compilées, et le code appelant n'a pas besoin de savoir quoi que ce soit à propos de JNI. – rcreswick

+0

Je ne peux pas le faire fonctionner avec Maven3. – Apurv

Questions connexes