【问题标题】:Using maven to build/deploy/use projects with JNI使用 maven 通过 JNI 构建/部署/使用项目
【发布时间】:2010-10-25 16:25:29
【问题描述】:

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

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

【问题讨论】:

  • 你有这个 mavenized opencv 包装项目托管在 maven repo 上吗?我想使用这个库。

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


【解决方案1】:

我对 FreeHEP 不熟悉,但如果您在设置 surefire 上的 java.library.path 以运行测试时遇到问题,我在以下位置找到了一个示例:http://buildanddeploy.com/node/14 post 有点复杂,但展示了如何让 maven 将本机库复制到一个目录,然后将 java.library.path 指向该目录。过去我自己也使用过类似的方法。

同样查看错误,是否需要设置 LD_LIBRARY_PATH 来修复它?如果是这样,您也应该在 maven 中获取此设置。

这是一个如何设置它的示例(来自http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI): maven-surefire-插件 一次 目标/tmplib java.library.tmpdir 目标/tmplib

【讨论】:

  • 谢谢! (我知道,这已经非常非常晚了)codehaus 链接效果很好。
  • 向阅读此内容的任何人澄清一下:CodeHaus 链接描述了一种不需要 需要设置 LD_LIBRARY_PATH 或任何其他环境变量的方法。生成的 jar 包含所有编译好的库,调用代码不需要了解 JNI 的任何信息。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多