使用maven使用JNI构建/部署/使用项目

时间:2009-05-12 20:49:35

标签: java maven-2 build-process java-native-interface

我正在尝试使用maven构建一个依赖于OpenCV计算机视觉库周围的JNI包装器的项目。我已经能够通过使用FreeHEP的NAR maven插件来“maven-ize”OpenCV包装器http://ubaa.net/shared/processing/opencv/,但该插件的文档有点缺乏。

我已经能够创建一个依赖于OpenCV jni项目的项目(imagedetect)(我称之为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

这特别令人沮丧 - 我知道解决这个问题的唯一方法是以某种方式跟踪opencv库的.nar文件,手动提取它们,设置java.library.path,然后调用gnaraly java命令用适当的类路径/库路径实际执行测试/应用程序。这不起作用 - 特别是如果此问题持续存在于传递依赖性中。

如何使这个构建/测试/执行系统更清洁?我没有参加FreeHEP,但我想坚持使用maven,因为它使我们最常见的用例更加简单。

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

1 个答案:

答案 0 :(得分:4)

我不熟悉FreeHEP,但是如果你在surefire上设置java.library.path以运行测试时遇到了问题,我在http://buildanddeploy.com/node/14找到了一个例子 它有点涉及发布,但展示了如何让maven将本机库复制到一个目录,然后指向你的java.library.path。我过去曾经使用过类似的方法。

同时查看错误,您是否需要设置LD_ LIBRARY_ PATH来修复它?如果是这样的话,你也应该在maven中设置这个。

以下是如何将此设置为surefire(来自http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI)的示例:                    Maven的万无一失,插件                    一旦                        目标/ tmplib                                                  java.library.tmpdir               目标/ tmplib