spring-boot-loader的启动与加载全流程
spring boot 应用可执行JAR资源结构
利用命令gradle bootJar 打包 得到 spring_lecture-1.0-SNAPSHOT.jar
JAR文件有时也称为“Fat JAR”,采用zip压缩格式存储,因此凡是能解压zip压缩文件的软件,均可将JAR包解压。
解压
|
|
目录结构:
- BOOT-INF/classes 目录存放应用编译后的class文件
- BOOT-INF/lib 目录存放应用依赖的JAR包
- META-INF/ 目录存放应用相关的元信息,如MANIFEST.MF文件
- org/ 目录存放Spring Boot相关的class文件。
FAT JAR和WAR执行模块 spring-boot-loader
启动命令:
Java官方文档规定,java -jar 命令引导的具体启动类必须配置在 MANIFEST.MF 资源的 Main-Class 属性中。
JAR文件规范,MANIFEST.MF 资源必须存放在 /META-INF/目录下
入口 MANIFEST.MF
可执行JAR文件的启动器JarLauncher
项目中是找不到这个类的,因为在构建的时候插件把这些内容打进了jar包里,但是项目里是没有引用的,接下来我们就要在项目中引入这些jar包。
build.gradle引入spring-boot-loader
JarLauncher的实现原理
JarLauncher
在一个jar文件中我们必须要将被指定为Main-Class的类直接放置到jar文件内部的顶层目录,不允许再被嵌套。
jar文件的嵌套,在jar的规范中是不允许的,这样会导致目标类是无法被执行的。所以是将spring-boot-loader jar包中的class类拷贝到了打包后jar文件的顶层目录
启动时执行main方法,调用JarLauncher构造方法时,首先调用父类ExecutableArchiveLauncher构造方法,再调用父类Launcher里的createArchive,这里会根据jar包的全路径返回一个Archive对象赋值给final属性archive
然后调用JarLauncher实例的launch方法
|
|