创建可执行 JAR 文件

📦 创建可执行 JAR 文件

🔹 概述

在完成示例的最后环节,我们将创建一个完全自包含的可执行 jar 文件,该文件可直接在生产环境运行。可执行 jar(又称 uber jarfat jar)是一种包含编译后类文件及全部运行时依赖包的归档文件。


🌐 可执行 JAR 与 Java 的兼容性

问题

Java 原生不支持加载嵌套 jar 文件(即包含在 jar 内的其他 jar 文件),这一特性在分发独立应用程序时会造成不便。


🔄 解决方案对比

🔸 传统方案:uber jar

将所有依赖库的类文件打包进单一归档,但存在以下缺陷:

1️⃣ 难以识别应用程序实际使用的库文件

2️⃣ 当不同 jar 中包含同名文件时会产生冲突

🔹 Spring Boot 方案

采用创新方案,支持原生嵌套 jar 文件结构。


🏗 Maven 构建方式

1️⃣ 配置插件

pom.xml 文件的 dependencies 章节之后添加 spring-boot-maven-plugin 插件配置:

xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

注意

使用 spring-boot-starter-parent 作为父 POM 时会自动配置 repackage 目标,否则需手动声明(详见插件文档)。


2️⃣ 执行打包命令

在命令行运行打包指令:

bash 复制代码
$ mvn package

📌 输出示例

复制代码
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO] BUILD SUCCESS

3️⃣ 检查生成文件

• 🏷 主文件 :18MB 左右的 myproject-0.0.1-SNAPSHOT.jar

• ⏮ 原始文件 :体积较小的 myproject-0.0.1-SNAPSHOT.jar.original(Spring Boot 重打包前的初始文件)


4️⃣ 运行应用
bash 复制代码
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

🖥 控制台将显示 Spring Boot 启动日志,按 ctrl-c 可退出应用。


📦 Gradle 构建方式

1️⃣ 执行构建命令
bash 复制代码
$ gradle bootJar

📌 输出示例

复制代码
BUILD SUCCESSFUL in 639ms

2️⃣ 检查生成文件

build/libs 目录可找到约 18MB 的 jar 文件,使用以下命令查看内容:

bash 复制代码
$ jar tvf build/libs/myproject-0.0.1-SNAPSHOT.jar

3️⃣ 运行应用
bash 复制代码
$ java -jar build/libs/myproject-0.0.1-SNAPSHOT.jar

🔄 运行效果与 Maven 版本一致,通过 ctrl-c 终止应用。


📚 [术语对照]

• 🏷 uber jar - 超级归档包

• 📦 fat jar - 胖归档包

• 🔄 nested jar - 嵌套式归档包

• ⚙ repackage goal - 重新打包目标

• 📂 build/libs directory - 构建/库目录

相关推荐
汤姆yu38 分钟前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶42 分钟前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip2 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide2 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot
figo10tf3 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
zhangyi_viva3 小时前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
橙露3 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
程序员敲代码吗3 小时前
Spring Boot与Tomcat整合的内部机制与优化
spring boot·后端·tomcat
NuageL3 小时前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json
jzheng86104 小时前
Spring Boot(快速上手)
java·spring boot·后端