SpringBoot,Maven:使用本地jar包

发布于 2021-07-23  554 次阅读


问题简述

最近使用SpringBoot做项目,需要引入其他工程的POJO包,由于第一次接触Maven,所以在网上随便找了一则例子将jar包放到工程下的lib(根目录新建)文件夹中,然后pom中引入,工程开发测试都OK,但是打包发布时,目录lib下的jar包总是打不进去,网上搜寻好久才找到答案,在此分享给大家。

问题环境

使用SpringBoot 2.0.1;Maven 4.0.0;JDK 1.8

问题解决

  1. 首先在工程根目录下新建文件夹lib,之后在pom.xml中引入本地jar包,配置如下:
<dependency>
 <groupId>coupon-pojo</groupId>
  <artifactId>coupon-pojo</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/coupon-pojo-1.0.jar</systemPath> //使用本地包必须使用这种方式,不然就要使用dubbo框架,实现远程RPC调用
</dependency>

其中groupId和artifactId自定义取名,version为当前jar包版本(自定义),scope固定用system,systemPath中${project.basedir}为项目根目录(建议使用此方式),coupon-pojo-1.0.jar为jar包全名称。

  1. 如项目打包成war,则在<build>标签下的<plugins>中新增如下配置:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <warName>${project.artifactId}</warName>
    <webResources>
      <resource>
        <directory>lib/</directory>
        <targetPath>WEB-INF/lib</targetPath>
        <includes>
          <include>**/*.jar</include>
        </includes>
      </resource>
    </webResources>
  </configuration>
</plugin>

其中:
groupId和artifactId固定;
warName为打包war名称(${project.artifactId}取的是pom中设置的值);
directory为工程中jar包所在路径;
targetPath为打包后jar包放置的路径,同上;
include为lib目录中的jar包,可配置*全部导入;

  1. 如果工程打包成jar,需要在pom.xml中添加如下配置:
 <resources>  
     <resource>  
         <directory>lib</directory>  
         <targetPath>BOOT-INF/lib/</targetPath>  
         <includes>  
             <include>**/*.jar</include>  
         </includes>  
     </resource>
 </resources>

欢迎欢迎~热烈欢迎~