SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行jar包。
SpringBoot应用打包以后,生成一个FatJar,里面包含了应用依赖的jar包和SpringBoot loader相关的类。
java -jar会去找jar包中的manifest文件,在那里面找到真正的启动类Main-Class
FatJar的启动类是org.springframework.boot.loader.launch.JarLauncher,它负责创建一个自定义ClassLoader(LaunchedClassLoader)用来加载boot-lib下面的jar,然后运行应用的启动类的Main方法,对应manifest文件中的Start-Class
如果想查看JarLauncher的源码,需要在pom文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-loader</artifactId>
</dependency>