一:问题场景

    在开发过程中,我们有时会遇到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之间没有空格,三围可以根据自己需求设置

spring boot 指定jar 包端口运行_jar包

spring boot 指定jar 包端口运行_jar_02

然后去本地资源库看下是否有相应文件

spring boot 指定jar 包端口运行_war包_03

(1.3)在pom依赖中引入安装的jar包

 

spring boot 指定jar 包端口运行_jar包_04

第一种方法介绍完毕

 

 

(2)本地jar包放入项目目录中(项目打包成jar)

 (2.1)jar包结构

spring boot 指定jar 包端口运行_war包_05

spring boot 指定jar 包端口运行_jar_06

 

(2.2)在本地项目目录中建一个目录专门来放jar文件,位置可根据需求设置,如项目根目录下建一个lib目录,并将本地jar包放入lib目录下。

spring boot 指定jar 包端口运行_war包_07

(2.3)pom依赖中加入如下配置

spring boot 指定jar 包端口运行_war包_08

说明:basedir是自带变量,指的是当前项目的绝对路径

 此时,在项目中使用myjar-1.0.jar包中类完全没有问题,但是我们来看看打包后结果:

spring boot 指定jar 包端口运行_jar包_09

 

 在mvn clean package将项目打包成jar包后,BOOT-INF\lib目录下并没有我们引入的myjar-1.0.jar包

 这时,还需要在pom中加入如下配置

 

spring boot 指定jar 包端口运行_jar包_10

 再次打包,mvn clean package打包后结果:

spring boot 指定jar 包端口运行_jar包_11

在使用mvn clean package将项目打包成jar包后,BOOT-INF\lib目录下出现了我们引入的myjar-1.0.jar包

项目引入本地jar包并打包成jar包的方法介绍完毕,2.4节将介绍一种和本节相似的方法。

 

(2.4)通过资源来控制打包

spring boot 指定jar 包端口运行_war包_12

注意:第二个resource不能少,否则src/main/resources目录下资源不会被打包进项目jar包

此种方法也需要配置spring-boot-maven-plugin,只是相对2.3中配置去掉configuration的配置,这种方法个人感觉没有2.3节方便

 

(3)项目打包成war包

   (3.1)war包结构

spring boot 指定jar 包端口运行_jar包_13

spring boot 指定jar 包端口运行_jar包_14

(3.2)我们按照第2节中方法,将项目打包成war包,而不是jar包,看看打包后结果:

spring boot 指定jar 包端口运行_war包_15

    发现按照打包jar包的方法打包成war包时,本地jar文件并没有打包进来。

(3.3)在pom中添加如下插件

spring boot 指定jar 包端口运行_jar_16

说明:插件将lib目录下的本地jar包打包进WEB-INF/lib目录

mvn clean package,再次将项目打包成war包,再次看下打包结果:

spring boot 指定jar 包端口运行_war包_17

 

 本地myjar-1.0.jar被打包进项目war包的lib目录了。