背景
最近在开发项目中需要对接海康威视摄像头,进行视频、照片等数据的获取保存;海康提供的sdk的jar包是自己开发的,在maven库中是找不到的,在项目中需要手动指定jar包路径
<dependency>
<groupId>com.haikang</groupId>
<artifactId>examples</artifactId>
<systemPath>${project.basedir}/lib/examples.jar</systemPath>
<version>1.0</version>
</dependency>
这样配置,然后在本地调试是没有问题的。
然而,当把项目打包部署到客户的服务器运行时,调用海康sdk的时候报错
java.lang.ClassNotFoundException: com.sun.jna.examples.win32.W32API$HWND
发现问题
经检查发现,是因为打包的时后没有把examples.jar打包到war包中,导致调用对应的方法的时候找不到包
解决问题
先到网上去找本地jar包打包问题,看到了这篇文章:idea本地jar使用maven打包本地依赖实现自动编译到项目里的操作
找到该条命令:
mvn install:install-file
-Dfile=F:\xxx\bigdata\2024\vision\lib\examples.jar
-DgroupId=com.xxx.examples
-DartifactId=com-xxx-examples
-Dversion=1.0.0
-Dpackaging=jar
将其中的路径和ID换成自己的,在idea中执行,报错:pom.xml not found in examples.jar
再次搜索解决方案
百度AI智能回答:你需要确保你指向的 JAR 文件是一个有效的 Maven 项目,并且 pom.xml 文件存在且配置正确。如果 JAR 文件不是 Maven 项目,你可能需要手动创建一个 pom.xml 文件来描述如何使用该 JAR 文件。
于是我在examples.jar的文件加下面创建了一个pom.xml文件,内容填写为:
<project>
<groupId>com.haikang</groupId>
<artifactId>examples</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies/>
</project>
然后将maven打包命令修改为:
mvn install:install-file
-Dfile=D:\aaa\examples.jar
-DpomFile=D:\aaa\pom.xml
-Dgroupld=com.haikang
-Dartifactld=examples
-Dversion=1.0.0
-Dpackaging=jar
成功了!!!
最后,我在把maven库的依赖改成
<dependency>
<groupId>com.haikang</groupId>
<artifactId>examples</artifactId>
<version>1.0</version>
</dependency>
再打包项目,jar包已经包含进去了,且摄像头SDK调用成功