使用 maven-shade-plugin 打包你的 Maven 项目

在Java开发中,当我们需要将应用程序及其所有依赖项打包成一个单一的可执行Jar文件时,maven-shade-plugin是一个非常有用的Maven插件。这种所谓的"uber-jar"或"fat-jar"可以方便地部署和分发,因为它不依赖于外部的库文件。

什么是 maven-shade-plugin

maven-shade-plugin 是一个Maven插件,它可以在构建过程中创建一个包含所有依赖项的Jar文件。与 maven-assembly-plugin 不同,maven-shade-plugin 会在最终的Jar文件中重写依赖项的元数据,以避免在运行时出现冲突。

为什么使用 maven-shade-plugin

  • 简化部署:生成的Jar文件包含了所有依赖项,无需额外的库文件。
  • 避免类冲突:插件会重命名冲突的类文件,以确保运行时的稳定性。
  • 资源合并:可以合并META-INF中的资源文件,如MANIFEST.MF。

如何配置 maven-shade-plugin

以下是如何在 pom.xml 文件中配置 maven-shade-plugin 的步骤:

  1. 添加插件到 pom.xml
xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version> <!-- 使用最新的稳定版本 -->
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- 配置 transformer 来合并服务文件 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            <!-- 配置 transformer 来合并MANIFEST.MF -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.example.MainClass</mainClass> <!-- 指定主类的全限定名 -->
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  1. 指定主类 :在 ManifestResourceTransformer 中的 mainClass 配置项用于指定项目的主入口类。

  2. 运行构建:配置完成后,运行以下命令来构建项目:

bash 复制代码
mvn clean package

这将生成一个包含所有依赖项的Jar文件,通常位于 target 目录下。

运行打包的 Jar

生成的 Jar 文件将是一个可执行的 Jar,你可以使用以下命令来运行它:

bash 复制代码
java -jar target/your-artifact-name-version-shade.jar

请确保替换 your-artifact-name-version-shade.jar 为你的实际 Jar 文件名。

注意事项

  • 在使用 maven-shade-plugin 时,务必确保所有必要的资源和配置文件都被正确包含和合并。
  • 如果你的项目中有需要特殊处理的资源文件,你可能需要添加额外的 transformer 来处理这些文件。
  • 在某些情况下,你可能需要排除某些特定的依赖项或资源文件,这可以通过配置 excludesincludes 来实现。

通过使用 maven-shade-plugin,你可以轻松地将你的 Maven 项目及其所有依赖项打包成一个单一的可执行 Jar 文件,简化了部署和分发过程。希望这篇文章能帮助你更好地利用这个强大的Maven插件。如果你有任何疑问或需要进一步的帮助,请随时在评论区留言。

相关推荐
羚羊角uou9 分钟前
【Linux】线程池
java·开发语言
阿拉-M8316 分钟前
IntelliJ IDEA Windows 系统高频快捷键使用手册
java·windows·intellij-idea
lingggggaaaa33 分钟前
小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇&数据库篇&MySQL&MSSQL&Oracle&自动化项目
java·数据库·windows·笔记·学习·安全·网络安全
迦蓝叶1 小时前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
安卓开发者1 小时前
鸿蒙NEXT应用接入快捷栏:一键直达,提升用户体验
java·harmonyos·ux
yudiandian20141 小时前
03 Eclipse 配置 JDK 环境
java·ide·eclipse
_码力全开_1 小时前
P1005 [NOIP 2007 提高组] 矩阵取数游戏
java·c语言·c++·python·算法·矩阵·go
陈一Tender1 小时前
JavaWeb后端实战(登录认证 & 令牌技术 & 拦截器 & 过滤器)
java·开发语言·spring boot·mysql
Camel卡蒙1 小时前
红黑树详细介绍(五大规则、保持平衡操作、Java实现)
java·开发语言·算法