fat jar到底胖在哪儿

146 阅读3分钟

Spring Boot 的 Fat JAR(也称为可执行 JAR)是一种将应用程序及其所有依赖项打包到一个 JAR 文件中的方式,使得应用程序可以独立运行而无需依赖外部的类路径。Spring Boot 提供了这种功能,简化了部署和分发过程。以下是有关 Spring Boot Fat JAR 的详细信息:

一、Fat JAR 的概念

Fat JAR 是一种 JAR 文件格式,其中不仅包含了应用程序的代码和资源,还包括了所有必要的依赖项(即第三方库和框架)。这样,你只需要一个 JAR 文件就能在任何支持 Java 的环境中运行应用程序。

二、Spring Boot 如何创建 Fat JAR

Spring Boot 利用其构建工具(如 Maven 或 Gradle)和插件来创建 Fat JAR 文件。Spring Boot 的插件会将应用程序及其所有依赖项打包成一个可执行的 JAR 文件。

1. 使用 Maven 创建 Fat JAR

如果你使用 Maven,可以通过以下步骤创建 Fat JAR 文件:

  • 添加 Spring Boot 插件:在 pom.xml 文件中添加 Spring Boot Maven 插件配置。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
  • 构建 Fat JAR:运行 Maven 构建命令,生成 Fat JAR 文件。

    mvn clean package
    

    生成的 JAR 文件会在 target 目录下,通常文件名为 your-app-name-version.jar

2. 使用 Gradle 创建 Fat JAR

如果你使用 Gradle,可以通过以下步骤创建 Fat JAR 文件:

  • 添加 Spring Boot 插件:在 build.gradle 文件中应用 Spring Boot 插件。

    plugins {
        id 'org.springframework.boot' version 'x.x.x'
        id 'java'
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
    }
    
  • 构建 Fat JAR:运行 Gradle 构建命令,生成 Fat JAR 文件。

    ./gradlew build
    

    生成的 JAR 文件会在 build/libs 目录下,文件名通常为 your-app-name-version.jar

三、运行 Fat JAR

生成 Fat JAR 后,你可以通过以下命令直接运行它:

java -jar your-app-name-version.jar

这将启动 Spring Boot 应用程序,并使用 JAR 文件中的内嵌 Servlet 容器(如 Tomcat)来运行应用。

四、Fat JAR 的结构

Fat JAR 文件的结构通常包括以下几个部分:

  • META-INF:包含 JAR 文件的元数据(如 MANIFEST.MF 文件),其中包括入口点(main class)的定义。
  • BOOT-INF/classes:包含编译后的应用程序类文件。
  • BOOT-INF/lib:包含所有的应用程序依赖项(第三方库)。
  • BOOT-INF/lib/:包含应用程序的所有依赖 JAR 文件。
  • META-INF/spring.factories:Spring Boot 特有的文件,用于自动化配置和其他功能。

五、Fat JAR 的优缺点

优点:

  • 简化部署:所有依赖都打包在一个 JAR 文件中,部署变得简单,不需要处理复杂的类路径问题。
  • 便于分发:可以方便地将一个 JAR 文件分发给其他环境或用户。
  • 独立运行:包含内嵌的 Servlet 容器(如 Tomcat),不需要外部的应用服务器。

缺点:

  • 文件大小:Fat JAR 文件通常比较大,因为它包括所有的依赖项。
  • 更新不便:每次依赖更新时都需要重新打包整个 Fat JAR 文件。

六、优化 Fat JAR

虽然 Fat JAR 方便易用,但在某些情况下,可以通过以下方式优化:

  • 使用 JLink:Java 9 引入了 JLink 工具,可以创建包含所需模块的自定义 JRE,进一步减小运行时环境的大小。
  • 去重和压缩:通过工具(如 spring-boot-maven-pluginrepackage 目标)优化 JAR 文件中的重复依赖和压缩。

总结

Spring Boot 的 Fat JAR 是一种简化应用程序部署和分发的强大工具,通过将应用程序及其所有依赖项打包到一个 JAR 文件中,使得应用程序可以独立运行。使用 Spring Boot 提供的 Maven 或 Gradle 插件,可以方便地创建 Fat JAR 文件,并通过简单的 java -jar 命令启动应用程序。