Spring Boot 的打包插件用着很爽吧,直接把源码和所有依赖打成一个 Jar 包还能直接java -jar
运行。那如果非 Spring Boot 项目,想打成一个可执行的 Jar 包该怎么办呢?
别慌,Maven 这种老牌构建工具,搞定这个事情还不是轻轻松松!
下面介绍一些其他的 Maven 插件,同样可以直接将 Maven 项目打包成一个可执行的 Jar 包(uber jar/executable jar),而且功能更强大,应用场景更丰富!
maven-dependency-plugin
maven-dependency-plugin是 Maven 的一个内置插件,从名字就能看出来,它的功能就是处理依赖的。内置了很多目标(goals),功能非常全:
- dependency:copydependency:copy-dependencies
- dependency:unpack
- dependency:unpack-dependencies
- dependency:resolve
- dependency:sources
- dependency:resolve-plugins
- dependency:go-offline
- dependency:purge-local-repository
- dependency:analyze
- dependency:analyze-dep-mgt
- dependency:analyze-report
- dependency:tree
- dependency:build-classpath
- dependency:list-repositories
- dependency:get
通过 unpack-dependencies
这个目标来解压依赖的包/源码,就可以完成一个 all-in-one 的打包方式:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<!-- 绑定到 prepare-package 阶段 -->
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
这个 unpack 的方式,会把所有依赖包(内部模块依赖和外部模块依赖)都“解压”,就是说会把依赖包的代码(class)都拷贝到 outputDirectory 目录里,类似一个合并的操作,结果就像这样: