我们现在 Java 项目一般都使用 Maven 进行依赖管理,二方包三方包都是从公司的私服远程拉取。最近做一个外采系统的二次开发,SDK 只提供离线 jar 包,这样我们就得想办法告诉 Maven 同时引入远程和本地的依赖,并且在打包时包含本地依赖。
将 xxxSDK.jar 包拷贝进项目,比如 src/lib 里;
在 pom.xml 文件里新增 dependency:
<dependency> <groupId>com.xxx</groupId> <artifactId>xxx-sdk</artifactId> <scope>system</scope> <version>${xxxSDK.version}</version> <systemPath>${project.basedir}/src/lib/xxxSDK.jar</systemPath> </dependency>
注意 scope 是 system,表明是基于文件系统,配合 systemPath 查找。
groupId、artifactId、version 可以按实际情况瞎写。
在 pom.xml 里添加
<includeSystemScope>true</includeSystemScope>
指定打包的时候将引用的本地 jar 也打包进去,比如 SpringBoot 项目的:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 加以下配置 --> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin>
好了大功告成。
后续问题:
- 打包后运行时,报错
Correct the classpath of your application so that it contains a single, compatible version of
,这是由于包冲突,可以排除冲突包,只保留一个正确版本解决,如果无法排除(比如从本地 jar 包引入的),则可以调整 dependency 顺序,将正确版本放在最前面。
参考:Maven项目引用本地jar包_xiaowu&的博客-CSDN博客_maven引入本地jar
文档信息
- 本文作者:sysnat
- 本文链接:https://sysant.github.io/fragment/maven-include-local-jar/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)