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 目录里,类似一个合并的操作,结果就像这样:

本文介绍了如何在非 Spring Boot 项目中,利用 Maven 的 maven-dependency-plugin、maven-shade-plugin 和 maven-assembly-plugin 打包成可执行 Jar 包。这三个插件通过不同的方式将依赖合并,创建 Uber Jars。详细探讨了每个插件的使用方法和适用场景,帮助开发者理解构建过程中的差异和选择。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



