使用 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插件。如果你有任何疑问或需要进一步的帮助,请随时在评论区留言。

相关推荐
后端AI实验室4 小时前
我把一个生产Bug的排查过程,交给AI处理——20分钟后我关掉了它
java·ai
凉年技术6 小时前
Java 实现企业微信扫码登录
java·企业微信
狂奔小菜鸡7 小时前
Day41 | Java中的锁分类
java·后端·java ee
hooknum7 小时前
学习记录:基于JWT简单实现登录认证功能-demo
java
程序员Terry8 小时前
同事被深拷贝坑了3小时,我教他原型模式的正确打开方式
java·设计模式
NE_STOP8 小时前
MyBatis-缓存与注解式开发
java
码路飞8 小时前
不装 OpenClaw,我用 30 行 Python 搞了个 QQ AI 机器人
java
Re_zero8 小时前
以为用了 try-with-resources 就稳了?这三个底层漏洞让TCP双向通讯直接卡死
java·后端
SimonKing8 小时前
Fiddler抓包完全指南:从安装配置到抓包,一文讲透
java·后端·程序员
磊磊落落10 小时前
如何将 Spring Statemachine 作为一个轻量级工作流引擎来使用?
java