Maven 打包时包含项目下的Jar

前言

有的Jar是Maven仓库中没有的,我们要引用项目下的Jar,我们可能会这么写

1
2
3
4
5
6
7
<dependency>
<groupId>cn.psvmc</groupId>
<artifactId>mysql8</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/libs/mysql8-1.1.jar</systemPath>
</dependency>

但是当我们打包的时候却发现

这种方式引用的Jar并不能打包到最终的Jar中。

解决方法有两种:

  • 把Jar注册到Maven中
  • 修改打包的Jar范围

方式1

使用Maven 在运行项目前先把Jar注册到Maven仓库中

环境变量中添加Maven的位置

D:\Program Files\JetBrains\IntelliJ IDEA 2022.2.4\plugins\maven\lib\maven3\bin

install-jar.bat

1
2
3
4
set MYPATH=%cd%
call mvn install:install-file -Dfile=%MYPATH%\src\main\libs\mysql8-1.1.jar -DgroupId="cn.psvmc" -DartifactId="mysql8" -Dversion="1.1" -Dpackaging=jar
call mvn install:install-file -Dfile=%MYPATH%\src\main\libs\yxdp-algorithm-1.0.0.jar -DgroupId="com.yxkj" -DartifactId="yxdp-algorithm" -Dversion="1.0.0" -Dpackaging=jar
pause

运行install-jar.bat

项目下引用

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>cn.psvmc</groupId>
<artifactId>mysql8</artifactId>
<version>1.1</version>
</dependency>

<dependency>
<groupId>com.yxkj</groupId>
<artifactId>yxdp-algorithm</artifactId>
<version>1.0.0</version>
</dependency>

方式2(推荐)

依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>cn.psvmc</groupId>
<artifactId>mysql8</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/libs/mysql8-1.1.jar</systemPath>
</dependency>

<dependency>
<groupId>com.yxkj</groupId>
<artifactId>yxdp-algorithm</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/libs/yxdp-algorithm-1.0.0.jar</systemPath>
</dependency>

插件配置

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
30
31
32
33
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.xhkjedu.TCS</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<!-- 将这一段注释掉 -->
<!--<descriptorRefs>-->
<!-- <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!--</descriptorRefs>-->
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<!-- 增加配置 -->
<configuration>
<!-- assembly.xml文件路径 -->
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>

添加 src/assembly/assembly.xml 文件配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<assembly>
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<!-- 默认的配置 -->
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
<!-- 增加scope类型为system的配置 -->
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>system</scope>
</dependencySet>
</dependencySets>
</assembly>

可以看到

主要增加了scope类型为system的配置;这样在打包的时候,就会把本地jar也打包进去