现在的需求是将本地的jar包一起使用maven打包到jar中,并且lib中还包含dll动态库(见坑3);
ps: 最终pom.xml配置在最后
经历的坑1,无法打包本地lib中的jar:
<dependency>
<groupId>org.jnetpcap</groupId>
<artifactId>jnetpcap</artifactId>
<version>1.4.1</version>
<scope>system</scope>
<systemPath>${project.basedir}\lib\jnetpcap-1.4.r1425\jnetpcap.jar</systemPath>
</dependency>
使用systemPath的方式,可以将本地jar添加到依赖中,但在运行mvn compile assembly:assembly
命令时会出现错误,即当添加<scope>system</scope>
时,lib中的依赖添加不到打包的jar中,不添加会报如下的错:
Build error: 'dependencies.dependency.systemPath' for com.parse:parse:jar must be omitted. This field may only be specified for a dependency with system scope
经历的坑2(systemPath的方法缺陷解决):
在查找解决方法后,得到如下结果:
<dependencies>
<dependency>
<groupId>org.jnetpcap</groupId>
<artifactId>jnetpcap</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>jnetpcap</id>
<url>file://${project.basedir}\lib\jnetpcap-1.3.0\</url>
</repository>
</repositories>
通过这样的方式将本地lib中的依赖打包到jar中,(会直接在dependencies中添加,如图:
经历的坑3(dll动态库没法打包,直接复制dll到项目根目录和target根目录):
- jnetpcap还需要本地的dll动态库的支持,上图的打包方式不会打包dll库,就很烦,找到的解决办法:将该dll复制到打包完的jar同一目录下,可以使用。
- 最后使用:
mvn clean compile assembly:assembly