Jar包是如何运行的 - 图1


  • java -jar 执行 MAINFEST.MF 中的 Main-Class 方法。这里的Main-Class是org.springframework.boot.loader.JarLauncher中的main()。
  • JarLauncher执行

    • 创建LaunchedURLClassLoader
    • 启动一个线程
      • ClassLoader加载MAINFEST.MFStart-Class 属性的类(也就是SpringBoot的启动类
      • 执行这个类
        到此开始执行SpringBoot

        右键运行和jar包运行的ClassLoader不一样

        右键运行是AppClassLoader
        jar运行是LaunchedURLClassLoader
        image.png
        LaunchedURLClassLoader主要就是可以加载jar中嵌套的jar包。
  • SpringBoot(二) 启动分析JarLauncher