Java的JAR包

JAR (Java Archive) 包是基于ZIP格式的归档文件,用于聚合Java类文件、资源文件(如图片、配置文件)和元数据(MANIFEST.MF)到一个单一文件中,实现跨平台分发和库管理。其核心原理包括目录结构组织、压缩封装以及利用MANIFEST.MF定义项目主类和依赖,由JVM加载运行。 一、 JAR包的核心组成与原理

  1. 基于ZIP压缩: JAR本质是ZIP归档格式,这使得它不仅能节省空间,还被JDK原生支持直接读取内部类文件。

  2. MANIFEST.MF 元数据: JAR包内META-INF/MANIFEST.MF是核心,定义了版本、主类(Main-Class,指明程序入口)等信息。

  3. 目录结构: 包含了编译后的.class文件、配置资源和清单文件。

二、 可执行JAR包原理 (java -jar)

普通JAR包一般作为类库使用,而可执行JAR包包含了一个含有public static void main(String[] args)的主类。

  1. 指定入口: 当执行java -jar时,JVM读取MANIFEST.MF中的Main-Class属性。

  2. 类加载: JVM通过自定义的类加载器加载JAR内的相关类。

三、 Spring Boot Fat JAR 启动原理 (进阶)

Spring Boot将所有依赖和代码打成一个Fat JAR,原理更为复杂:

  1. 特殊结构: FAT JAR包含BOOT-INF/classes(项目代码)、BOOT-INF/lib(第三方依赖),且自身没有将依赖打散。

  2. 自定义启动器: Spring Boot在MANIFEST.MF中指定Launcher(如JarLauncher),而非普通的业务主类。

  3. 自定义类加载器: JarLauncher启动后,利用自定义类加载器(LaunchedURLClassLoader)来加载BOOT-INF/lib中的嵌套JAR包,最后加载并运行用户实际的Start-Class。

总结来说,JAR包原理是将字节码文件和资源按一定结构归档压缩,再由MANIFEST文件定义入口,最终由JVM类加载机制读取加载。

相关推荐
阿良别做梦3 分钟前
LangGraph 学习之路:给文档摘要接上模型
后端·开源
Random Glow17 分钟前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
GISer_Jing2 小时前
营销活动低代码前后台方案
后端
IT_陈寒2 小时前
React项目实战经验分享:如何避免useEffect闭包陷阱导致的陈旧状态问题?
前端·人工智能·后端
Maynor9962 小时前
免费 Cloudflare 只有 10 个 D1?满了之后的「穷鬼打法」:表前缀复用同一个库
数据库·后端·云计算·cloudflare
沙蒿同学11 小时前
不引 Ghostscript:我用纯 Go 给 PDF 做了一场「压缩手术」
前端·后端·github
前进的李工13 小时前
飞书企业知识库设计+后端高频八股
数据库·redis·后端·mysql·性能优化·飞书·rag
金銀銅鐵14 小时前
[Java] 展示增删元素时 LinkedList 的内部变化
java·后端·ai编程
武子康15 小时前
Vercel Cache Reason:相同 MISS,怎样决定下一步查什么
人工智能·后端·agent
杨文说AI与数字化16 小时前
把模型依赖做成可替换的组件:三层适配 + 一套回归评估
后端