maven springboot 除去指定的jar包_SpringBoot的运行机制

SpringBoot打包机制

先看一眼spring-boot的maven插件打包后的target目录:

maven springboot 除去指定的jar包_SpringBoot的运行机制_第1张图片

其中有一个.jar.original的文件,一个.jar文件,其中.jar.original才是原始的jar包,而.jar文件是经过spring-boot的maven插件处理过后的jar,springboot的maven插件会将原始jar重命名成.jar.original,然后按springboot自己的规范打出一个可执行的jar包。

将该jar包重命名成.zip文件后打开即可看到文件中的内容:

maven springboot 除去指定的jar包_SpringBoot的运行机制_第2张图片

可以看到,springboot执行的jar并不是一个java标准的jar,其中包含了springboot自身定义的内容。我们再打开其中的META-INF/MANIFEST.MF文件,看看其中指定的内容:

maven springboot 除去指定的jar包_SpringBoot的运行机制_第3张图片

Main-Class是其中的启动类,springboot打包出来的jar,启动类并不是工程中包含main方法的启动类,而是springboot自己的JarLauncher类,而工程中定义的启动类在这里变成了Start-Class,由此也可以看出springboot应用在IDE里通过main方法运行与通过java -jar命令运行的区别。

SpringBoot应用的启动

打开springboot的Main-Class JarLauncher类,其中包含main方法:

maven springboot 除去指定的jar包_SpringBoot的运行机制_第4张图片

这是springboot启动的入口,JarLauncher类继承自ExecutableArchiveLauncher类,进入到launch方法可以看到springboot有一个archive的概念,archive是归档的意思,springboot打出来的jar包就是一个archive。

ExecutableArchiveLauncher类的createArchive方法可以看到启动时的archive创建,通过当前类找到jar包的路径,并创建JarFileArchive:

你可能感兴趣的:(maven,springboot,除去指定的jar包,springboot,启动类,springboot,无法启动)