一:问题场景
在开发过程中,我们有时会遇到Maven中央库没有的jar包,比如公司自己开发的而又没有放入公司私库的jar包,这时就不能通过三围在pom中直接引入。那么怎么在项目中引入这些本地或第三方jar包呢?
二:解决方法
常用的解决方法主要有两种。
第一种是将本地jar包安装在本地maven库。这种方法简单方便,以后其他项目需要引入时不需要再次安装。如果没有放入公司私库,则不适合协同开发,比如一位同事在本地安装了这个jar包,另一位同事通过SVN或git将代码下载下来后,由于本地库没有安装该jar包,可能会报错。
第二种是将本地jar包放入项目目录中。这种方法解决了第一种方法中的问题,但需要在pom文件中加上少许配置,这种方法根据将项目打包成jar和war包而略有不同。
三:详细方法
(1)安装在本地maven库
假设我们需要引入的包为 myjar-1.0.jar
(1.1)打开cmd,进入myjar-1.0.jar所在的目录
(1.2)执行如下命令:mvn install:install-file -Dfile=myjar-1.0.jar -DgroupId=com.ws.sample -DartifactId=myjar -Dversion=1.0 -Dpackaging=jar
注意:install:install-file 中-file与install之间没有空格,三围可以根据自己需求设置
然后去本地资源库看下是否有相应文件
(1.3)在pom依赖中引入安装的jar包
第一种方法介绍完毕
(2)本地jar包放入项目目录中(项目打包成jar)
(2.1)jar包结构
(2.2)在本地项目目录中建一个目录专门来放jar文件,位置可根据需求设置,如项目根目录下建一个lib目录,并将本地jar包放入lib目录下。
(2.3)pom依赖中加入如下配置
说明:basedir是自带变量,指的是当前项目的绝对路径
此时,在项目中使用myjar-1.0.jar包中类完全没有问题,但是我们来看看打包后结果:
在mvn clean package将项目打包成jar包后,BOOT-INFlib目录下并没有我们引入的myjar-1.0.jar包
这时,还需要在pom中加入如下配置
再次打包,mvn clean package打包后结果:
在使用mvn clean package将项目打包成jar包后,BOOT-INFlib目录下出现了我们引入的myjar-1.0.jar包
项目引入本地jar包并打包成jar包的方法介绍完毕,2.4节将介绍一种和本节相似的方法。
(2.4)通过资源来控制打包
注意:第二个resource不能少,否则src/main/resources目录下资源不会被打包进项目jar包
此种方法也需要配置spring-boot-maven-plugin,只是相对2.3中配置去掉configuration的配置,这种方法个人感觉没有2.3节方便
(3)项目打包成war包
(3.1)war包结构
(3.2)我们按照第2节中方法,将项目打包成war包,而不是jar包,看看打包后结果:
发现按照打包jar包的方法打包成war包时,本地jar文件并没有打包进来。
(3.3)在pom中添加如下插件
说明:插件将lib目录下的本地jar包打包进WEB-INF/lib目录
mvn clean package,再次将项目打包成war包,再次看下打包结果:
本地myjar-1.0.jar被打包进项目war包的lib目录了。