Maven打包-依赖非仓库中的jar包

由于明天要发布测试版本,所以今天要打个SpringBoot的jar包,本以为很简单,毕竟平时都是mvn clean packge之后target目录下就能出现你想要的jar包,但是这次的,有点特别。

运行环境

说明 版本
JDK 1.8
Maven 3.5.4
SpringBoot 2.1.3.RELEASE

项目结构

===============

crm

-libs

aa.jar

bb.jar

-src

-pom.xml

===============

可以看到加粗部分,引入了aa.jarbb.jar,有些人会问,这个两个jar用dependency的方式引入进来,然后从中央库中下载下来就好了,当然中央库或者本地库中有的话,是可以的,在某些特殊情况下,本地库有也引入不进来,博主也表示一脸懵逼中…

在IDEA中,我们可以右键两个jar包,点击Add as library,在IDEA中运行项目就能畅通无阻了,但是发版不可能是在IDEA这种IDE中运行项目,所以打包是必须的。

遇到的问题

按照正常做法,执行mvn clean packge,但是这时候就报错了,各种找不到符号,找不到类。

解决办法

  1. 在IDEA中点开jar包,找到jar包下的META-INF/maven.xxxxxx/pom.xml,确认artifactId、groupId、version以备使用,此处假设jar包名为aaa.jar、artifactId为helloword、groupId为com.demo、version为1.0.0

  2. 在项目pom.xml的<dependencies>标签中添加如下标签

    1
    2
    3
    4
    5
    6
    7
    <dependency>
    <groupId>com.demo</groupId>
    <artifactId>helloword</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/aaa.jar</systemPath>
    </dependency>

    其中要注意下systemPath的值,${project.basedir}是项目的根目录。

    需要额外引入多少个jar包就需要写多少个这种标签。

  3. 在项目pom.xml的<build>标签中添加如下标签

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <resources>
    <resource>
    <directory>${project.basedir}/libs</directory>
    <targetPath>BOOT-INF/lib/</targetPath>
    <includes>
    <include>**/*.jar</include>
    </includes>
    </resource>
    <resource>
    <directory>src/main/resources</directory>
    <targetPath>BOOT-INF/classes/</targetPath>
    </resource>
    </resources>
  4. 执行mvn clean packge即可打包

注意

需要注意的是,在Maven3.5.4能够解决这个问题,不保证其他Maven版本是否也能通过这种方式解决。