Spring Boot 打出的可执行 JAR 包(Executable JAR)(通常被称为 Fat JAR 或 Uber JAR)与普通的 Java 普通 JAR 包(Plain JAR)在结构、运行机制和依赖管理上有显著的区别。 以下是核心区别的详细对比: 1. 内部目录结构不同 这是最直观的区别。如果你解压这两个 JAR 包,你会看到完全不同的结构。 普通 JAR 包: 结构扁平。 直接包含编译后的 文件(按包路径存放)。 通常不包含依赖的第三方库(如 Spring Framework、Log4j 等)。 结构示例: Spring Boot 可执行 JAR 包: 结构嵌套。 :存放你自己编写的代码编译后的 文件。 :存放项目依赖的所有第三方 JAR 包(包括内嵌的 Tomcat/Jetty)。 :存放 Spring Boot 的类加载器代码(这是它能直接运行的关键)。 结构示例: 2. 文件(入口配置)不同 JAR 包中的 文件定义了 JAR 的元数据和入口点。 普通 JAR 包: 属性直接指向你编写的主类(包含 的类)。 示例: Spring Boot 可执行 JAR 包...