Использование maven для создания/развертывания/использования проектов с JNI

Я пытаюсь использовать maven для создания проекта, который зависит от оболочки JNI вокруг библиотеки компьютерного зрения OpenCV. Мне удалось "maven-ize" оболочку OpenCV здесь: http://ubaa.net/shared/processing/opencv/ с помощью подключаемого модуля FreeHEP NAR maven, но документации для этого подключаемого модуля не хватает.

Мне удалось создать проект (imagedetect), который зависит от проекта OpenCV jni (я называю это OpenCVJava). imagedetect будет компилироваться, однако любой тест, интеграционный тест или цель пакета завершатся с ошибкой о библиотеках, отсутствующих в 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

Это особенно расстраивает - единственный известный мне способ решить эту проблему - каким-то образом отследить файл .nar для библиотек opencv, вручную извлечь их, установить java.library.path, а затем вызвать команду gnaraly java для фактического выполнения тесты/приложение с правильным путем к классам/библиотекам. Это не сработает, особенно если эта проблема сохраняется для транзитивных зависимостей.

Как я могу сделать эту сборку/тестирование/выполнение системы более чистой? Я не настроен на FreeHEP, но я хотел бы придерживаться maven, так как это значительно упрощает наши наиболее распространенные варианты использования.

Плагин FreeHEP Nar: http://java.freehep.org/freehep-nar-plugin/intro.html


person rcreswick    schedule 12.05.2009    source источник
comment
У вас есть этот mavenized проект оболочки opencv, размещенный в репозитории maven? Я хотел бы использовать эту библиотеку.   -  person tommy chheng    schedule 14.09.2011


Ответы (1)


Я не знаком с FreeHEP, но если у вас возникли проблемы с настройкой java.library.path на surefire для запуска ваших тестов, я нашел пример по адресу: http://buildanddeploy.com/node/14 Это немного сложно для публикации, но показывает, как заставить maven скопировать собственные библиотеки в каталог, который вы затем указываете java.library.path в. Я сам использовал подобный подход в прошлом.

Также, глядя на ошибку, вам нужно было установить LD_ LIBRARY_ PATH, чтобы исправить ее? Если это так, вы также должны получить этот набор в maven.

Вот пример того, как установить это для уверенного запуска (из http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI): maven-surefire-plugin раз цель/tmplib java.library.tmpdir цель/tmplib

person bm212    schedule 12.05.2009
comment
Спасибо! (Я знаю, это очень, очень поздно) Ссылка на codehaus отлично работает. - person rcreswick; 06.11.2009
comment
Чтобы пояснить для тех, кто читает это: ссылка CodeHaus описывает метод, который не требует установки LD_LIBRARY_PATH или каких-либо других переменных среды. Получившийся jar-файл содержит все скомпилированные библиотеки, и вызывающему коду не нужно ничего знать о JNI. - person rcreswick; 06.11.2009