如何在 Maven 项目中使用 OpenCV 构建(opencv 和 opencv_contrib)
How to use OpenCV build (opencv and opencv_contrib) in a Maven project
我编译了 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.jar
和 lib/
文件夹做同样的事情:
cp opencv-411.jar opencv-411-new.jar
jar -uvf opencv-411-new.jar lib/
并保持上述依赖关系,但引发了相同的错误...
我该怎么办?
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=C:\Users\your jar 路径 -DgroupId=org.opencv -DartifactId=opencv-411 -Dversion=4.1.0 -Dpackaging=jar
你可以使用这个可能会解决你的问题
多亏了这些答案,我找到了将 OpenCV jar 和 libs 包含到 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>
如果您有更好的解决方案或要添加的更正,请随时编辑。
我编译了 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.jar
和 lib/
文件夹做同样的事情:
cp opencv-411.jar opencv-411-new.jar
jar -uvf opencv-411-new.jar lib/
并保持上述依赖关系,但引发了相同的错误...
我该怎么办?
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=C:\Users\your jar 路径 -DgroupId=org.opencv -DartifactId=opencv-411 -Dversion=4.1.0 -Dpackaging=jar 你可以使用这个可能会解决你的问题
多亏了这些答案,我找到了将 OpenCV jar 和 libs 包含到 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>
如果您有更好的解决方案或要添加的更正,请随时编辑。