maven搭建的springboot项目引入本地jar包配置方法

方法有2个,一个是将jar包导入到maven仓库,另一个是配置maven引用仓库之外的jar包

将jar包导入到maven仓库

这个方法是最推荐的,也是所有maven项目通用的,不仅仅适用于springboot项目。一般是有2种配置方法,一种是编写mvn命令脚本导入,另一种是使用插件maven-install-plugin

编写mvn命令导入

命令如下

1
mvn install:install-file -Dfile=XXX.jar -DgroupId=com.XXX -DartifactId=XXX -Dversion=X.X.X -Dpackaging=jar

其中:

  • -Dfile是jar包路径。
  • -DgroupId是maven坐标的groupId,如:org.apache.commons。
  • -DartifactId是maven坐标的artifactId,如:commons-lang3。
  • -Dversion是maven坐标的version,如:3.4。

比如jar包为not-in-repo.jar,那么可以在shell中进入到该jar包的目录,执行如下命令。

1
mvn install:install-file -Dfile=not-in-repo.jar -DgroupId=online.dinghuiye.maven -DartifactId=not-in-repo -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar

使用插件maven-install-plugin

需要按如下配置pom的plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>install-jar</id>
<phase>clean</phase>
<configuration>
<file>${basedir}/lib/not-in-repo.jar</file>
<repositoryLayout>default</repositoryLayout>
<groupId>online.dinghuiye.maven</groupId>
<artifactId>not-in-repo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

其中,

  • 标签<file>是jar包的具体路径,${basedir}就是pom.xml所在的路径。
  • 标签<groupId><artifactId><version>是maven坐标,同上面将jar包导入到maven仓库的案列。

配置好后,命令行执行或者ide中执行mvn clean即可以将jar包导入到maven仓库。

配置maven引用仓库之外的jar包

maven项目直接引入仓库之外的jar包的方式并不推荐,但是有时候不能执行jar包导入到maven仓库的操作时,也就只有使用这个方法了。

pom中依赖配置如下

1
2
3
4
5
6
7
8
9
10
11
<project>
<dependencies>
<dependency>
<groupId>online.dinghuiye</groupId>
<artifactId>not-in-repo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${basedir}/lib/not-in-repo.jar</systemPath>
</dependency>
</dependencies>
</project>

其中,

  • 标签<scope>配置为system,表示从本地获取,不会从maven仓库下载,但必须配置<systemPath>标签。
  • 标签<systemPath>配置为jar包路径,${basedir}为pom.xml所在目录。
  • 标签<groupId><artifactId><version>是maven坐标,同上面将jar包导入到maven仓库的案列。

这个时候执行mvn package时,一般的maven项目都可以打包成功了,但是springboot会出现如下提示

1
2
3
4
5
6
[WARNING] Some problems were encountered while building the effective model for xxx.xxx.xxx.xxx:xxx:pom:xxx
[WARNING] 'dependencies.dependency.systemPath' for xxx.xxx:xxx:jar should not point at files within the project directory, ${basedir}/lib/xxx.jar will be unresolvable by dependent projects @ line xxx, column xxx
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.

此时需要将pom中的标签<packaging>设置为war(原始是pom,这个地方是非常关键的),另外还需要将springboot的maven插件添加标签<includeSystemScope>并配置为true,如下,否则打出来的war包的lib下面没有jar包。

1
2
3
4
5
6
7
8
9
10
11
12
13
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>