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

相关推荐
Tony Bai4 小时前
Go 安全新提案:runtime/secret 能否终结密钥残留的噩梦?
java·开发语言·jvm·安全·golang
oioihoii4 小时前
C++11到C++23语法糖万字详解
java·c++·c++23
pengzhuofan5 小时前
Java演进与与工程师成长
java·开发语言
月明长歌5 小时前
再谈Java 继承与多态:从“能用”到“精通”,更深一层的原理与设计思维
java·开发语言
狗头实习生5 小时前
Spring常见的事务失效原因
java·数据库·spring
想个名字太难5 小时前
网络爬虫入门程序
java·爬虫·maven
diudiu_336 小时前
web漏洞--认证缺陷
java·前端·网络
heartbeat..6 小时前
注解 + 反射:Web 项目 Excel 一键导出工具 EnhancedExportExcelUtil 详解
java·excel·poi
lkbhua莱克瓦246 小时前
IO流练习(加密和解密文件)
java·开发语言·笔记·学习方法·io流·io流练习题
嘟嘟w7 小时前
Servlet的生命周期
java