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-plugin的repackage目标)优化 JAR 文件中的重复依赖和压缩。
总结
Spring Boot 的 Fat JAR 是一种简化应用程序部署和分发的强大工具,通过将应用程序及其所有依赖项打包到一个 JAR 文件中,使得应用程序可以独立运行。使用 Spring Boot 提供的 Maven 或 Gradle 插件,可以方便地创建 Fat JAR 文件,并通过简单的 java -jar 命令启动应用程序。