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

相关推荐
洛_尘2 分钟前
JAVA EE初阶8:网络原理 - HTTP_HTTPS(重要)
java·http·java-ee
独断万古他化3 分钟前
【Java 网络编程全解】Socket 套接字与 TCP/UDP 通信实战全解
java·网络编程·socket
牧小七7 分钟前
java14的新特性
java
努力努力再努力wz1 小时前
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!
java·linux·运维·服务器·c语言·数据结构·c++
魂梦翩跹如雨1 小时前
死磕排序算法:手撕快速排序的四种姿势(Hoare、挖坑、前后指针 + 非递归)
java·数据结构·算法
带刺的坐椅8 小时前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
jacGJ8 小时前
记录学习--文件读写
java·前端·学习
花间相见9 小时前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su9 小时前
Java---Properties 类
java·开发语言
cypking9 小时前
四、CRUD操作指南
java