Java面试题更新 2026-08-05

在Spring Boot中,由Maven或Gradle构建出的可执行jar与传统的普通jar在结构、运行方式和依赖处理上有哪些关键不同之处?请具体说明。

后端开发技术原理GradleJavaSpring Boot

考察说明

考查对Spring Boot可执行jar内部结构及其与普通jar差异的理解。

回答思路

  1. 【回答框架 1】普通jar通常只包含项目自身的编译后类与资源文件,不包含依赖库,运行时需要依赖外部Classpath;Spring Boot的fat jar将项目类、所有第三方依赖以及内嵌的Servlet容器(如Tomcat)一同打包。
  2. 【回答框架 2】Spring Boot jar遵循特殊的目录布局,例如BOOT-INF/classes存放应用类,BOOT-INF/lib存放依赖jar,并由org.springframework.boot.loader.JarLauncher作为入口类启动;META-INF/MANIFEST.MF中的Main-Class指向JarLauncher,Start-Class指定应用主类。
  3. 【回答框架 3】运行方式不同:普通jar需手动设置Classpath或用java -cp包含依赖;Spring Boot jar可直接用java -jar执行,无需外部依赖。
  4. 【回答框架 4】普通jar可作为库被其他项目引用,而Spring Boot fat jar不适合作为库直接引用,因为其目录结构特殊。
  5. 【回答框架 5】Spring Boot也支持将依赖置于外部实现可扩展性,但默认fat jar是主要差异点。
  6. 【关键点 1】Spring Boot jar是fat jar,包含所有依赖和内嵌容器。
  7. 【关键点 2】启动入口是JarLauncher,通过Start-Class定位主类。
  8. 【关键点 3】普通jar不包含依赖,需外部Classpath;Spring Boot jar可直接运行。
  9. 【易错点 1】不要把Spring Boot fat jar直接作为普通库依赖,结构不兼容。
  10. 【易错点 2】不要将Spring Boot jar与普通可执行jar混淆,后者可能仅包含主类但不含依赖。