【问题标题】:How to use OpenCV build (opencv and opencv_contrib) in a Maven project如何在 Maven 项目中使用 OpenCV 构建(opencv 和 opencv_contrib)
【发布时间】:2019-12-01 07:09:16
【问题描述】:

我编译了 openCV 和 OpenCV_contrib 库,并在 build/lib/ 中生成了 build/bin/opencv-411.jar 和库 .so。现在我想知道如何将这些添加到我的 Maven 项目中?

我使用的是 Maven repository,但 contrib 模块不可用。

我尝试将 jar 作为依赖项包含在 here 中:

<dependency>
    <groupId>org.opencv</groupId>
    <artifactId>opencv-411</artifactId>
    <version>4.1.0</version> 
    <scope>system</scope>
    <systemPath>${resourcesfolder}/opencv-411.jar</systemPath>
</dependency>

当我启动 clean javafx:compile 时我没有收到任何错误,但是当我启动 clean javafx:run 时会出现很多 OpenCV 错误:

[错误] 编译错误:

[INFO] -------------------------------------------------------------
[ERROR] /home/.../src/main/java/model/VideoModel.java:[3,23] package org.opencv.core does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[4,23] package org.opencv.core does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[5,26] package org.opencv.videoio does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[6,26] package org.opencv.videoio does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[25,17] cannot find symbol
     symbol:   class VideoCapture
     location: class model.VideoModel
[ERROR] /home/.../src/main/java/model/VideoModel.java:[26,17] cannot find symbol
     symbol:   class Mat

我还查看了that,但他在远程存储库中部署了包含可执行文件和库的新 jar。有趣的部分是 jar 创建,所以我尝试对 opencv-411.jarlib/ 文件夹做同样的事情:

cp opencv-411.jar opencv-411-new.jar
jar -uvf opencv-411-new.jar lib/

并保持如上的依赖关系,但引发相同的错误...

我该怎么办?

【问题讨论】:

    标签: java opencv jar m2eclipse


    【解决方案1】:

    Maven 需要 $USER_HOME/.m2 中的工件(.jar 文件等),因为您自己编译了 opencv,您还需要在本地 maven 存储库中安装文件(作为第 3 方模块):

    mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
        -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
    

    其中变量需要与您在 pom.xml 中使用的变量匹配,并且打包必须设置为 jar

    另请参阅:https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

    【讨论】:

    • 感谢您的快速回答,我执行了命令 mvn install:install-file -Dfile=/home/.../src/main/resources/opencv.jar -DgroupId=org -DartifactId=opencv -Dversion=4.1.1 -Dpackaging=jar 并从依赖项中删除了范围和 systemPath。但是我从 javafx-maven-plugin 收到“错误:无法找到或加载主类”,它以前可以工作..
    • 在你的 pom sn-p 你指的是版本 4.1.0(不是 4.1.1)你可以尝试 mvn -x (更详细的输出)
    • 版本也被修改了,所以不是问题。我将 OpenCV 库路径添加到 java.lib.path 和 &lt;argLine&gt;-Djava.library.path=/home/.../target/classes/lib&lt;/argLine&gt; 到 maven-surefire-plugin 和 clean package maven 目标工作(启动每个测试)!但是clean javafx:run 仍然会抛出“无法找到或加载主类...”
    【解决方案2】:

    mvn install:install-file -Dfile=C:\Users\你的 jar 路径 -DgroupId=org.opencv -DartifactId=opencv-411 -Dversion=4.1.0 -Dpackaging=jar 你可以使用这个可能会解决你的问题

    【讨论】:

    • 感谢您的回答,我执行了该命令,更改了依赖项并将 OpenCV 库路径添加到 maven-surefire-plugin。 package 目标完美运行,但 javafx:run 不起作用,因为它找不到主类..
    【解决方案3】:

    感谢答案,我找到了将 OpenCV jar 和库包含到 Maven 的解决方案:

    • 在 Maven 本地存储库中安装 jar:
    mvn install:install-file -Dfile=/home/.../src/main/resources/opencv.jar -DgroupId=org -DartifactId=opencv -Dversion=4.1.1 -Dpackaging=jar
    
    • 在 pom.xml 中创建依赖:
    <dependency> 
     <groupId>org</groupId> 
     <artifactId>opencv</artifactId>
     <version>4.1.1</version>  
    </dependency> 
    

    既然包含了 jar,我们必须以某种方式添加 OpenCV 库。

    只需在您的应用中加载库:

    System.load("/path/to/lib/libopencv_java411.so");
    

    对于 UI 测试,由于 maven-surefire-plugin 使用特殊的 JVM,您必须将 lib 文件夹指定到 java.library.path:

    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.22.2</version>
     <configuration>
      <argLine>-Djava.library.path=${project.build.outputDirectory}/lib</argLine>
     </configuration>
    </plugin>
    

    如果您有更好的解决方案或更正要添加,请随时编辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多