打加入依赖的包

在 pom.xml 中加入 maven-shade-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
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.app.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

在 maven 项目目录下运行命令:

1
mvn clean package

可以看到 target 目录下包含两个 jar 包:

  • my-app-1.0-SNAPSHOT.jar : with dependencies
  • original-my-app-1.0-SNAPSHOT.jar : without dependencies

Attention

  • 上面的配置同时指定了程序的入口com.example.app.Main, 执行命令 java -jar ./target/my-app-1.0-SNAPSHOT.jar 可以执行 jar 包。
  • minimizeJar 配置的作用是最小化 jar 包,即只将程序依赖的 classes 文件加入 jar 包中,这会大大减小包的大小。
  • 还可以利用 maven-assembly-plugin 打包,但这个插件不能解决依赖同一个包的多版本时的冲突

Reference

mvn 命令常用参数

  • -Dmaven.test.skip=true : 即不编译 test 代码,也不运行单元测试。
  • -Dmaven.javadoc.skip=true : 不生成 javadoc 包。