maven打包成minijar

本文演示使用mavenmaven-shade-plugin插件实现打包成minijar功能,并解决缺少依赖问题。

maven打包成可执行jar包时需要将依赖的jar包也一同打包到jar包内,最终可能导致得到的可执行jar体积太大,

但是第三方jar的部分class可能是从未使用到的,即使移除也不会影响程序运行,这样可以大大减少打包的体积。

插件maven-shade-plugin为我们提供了这样的功能,他会自动分析jar包内的依赖,将不需要的class移除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<minimizeJar>true</minimizeJar>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

上面配置插件,并挂钩到package步骤中,执行shade。配置minimizeJartrue即可。

部分依赖问题

上面很简单能实现minijar,但是插件在分析依赖时不能分析到反射获取的类,这会导致程序运行时反射获取类失败,所以需要手动处理这样的类。

下面我们在使用logback时,因为配置是写在配置文件里的,所以部分类会被插件丢弃掉导致class Not Find

可以配置filter节点手动包含类,规则是。

1
2
3
4
5
6
<filter>
<artifact>artifactId:artifactId</artifact>
<includes>
<include>**</include>
</includes>
</filter>

示例,包含logback-core的所有类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>ch.qos.logback:logback-core</artifact>
<includes>
<include>**</include>
</includes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>

​ 要注意的一点是,如果配置了filter,该artifact就不会自动处理依赖了,插件只包含include内手动指定的类,没指定的全部不会包含。我这里使用了** 表示全部包含进来。


maven打包成minijar
https://www.huangchaoyu.com/3106064082.html
作者
hcy
发布于
2020年3月21日
更新于
2024年8月17日
许可协议