zoukankan      html  css  js  c++  java
  • Spring Boot打包底层细节

    jar的目录内容

    在OSX下使用 unzip xxx.jar -d ./newdir 把解压缩文件放到新建目录

    Spring Boot打成Jar包的目录结构如图所示:

     BOOT-INF: 项目工程文件和依赖的所有Jar包

     META-INF: 清单文件,描述可执行jar包的一些信息

     org: Spring Boot 提供的class,在spring-boot-maven-plugin插件当中,在打包时动态提取的
    可以增加依赖引入:spring-boot-loader,对研究SpringBoot打包机制源码有帮助,打包后的目录结构是在JarLauncher定义的

    Spring Boot如何打包和执行

    关键包:spring-boot-loader

     当我们运行java -jar xxx.jar时,spring boot到底是怎么帮我们启动程序的

     从Main-Class: org.springframework.boot.loader.JarLauncher入手找到JarLauncher类,从main方法开始执行

     该类的父类为ExecutableArchiveLauncher,该父类还有一个实现WarLauncher用于打War
    JarLauncher的继承结构如下:

    被指定为Main-Class类的目录结构一定是放在jar文件中的顶层目录

    1. 一般的jar标准是不允许jar文件中还存在jar文件的

    通常maven的做法是使用shade插件把被依赖的jar文件的内容拷贝到被打包的jar文件中,但是存在缺陷

    • 目录结构不清晰
    • 相同目录同名的文件可能有被覆盖的风险

    Spring Boot通过嵌套的jar,通过应用类加载器加载spring-boot-loader的类(文件夹org),然后自定义一个类加载器(LaunchedURLClassLoader,继承于URLClassLoader)加载嵌套的依赖jar(FatJar)和自己应用的class

     Archive对象代表的是classes文件或者lib下的jar

  • 相关阅读:
    5、include为应用指定多个struts配置文件
    4、struts处理流程和action的管理方式
    8、类型转换器
    7、请求参数接收
    UESTC 2014 Summer Training #6 Div.2
    Codeforces Round #FF
    css ul li去除圆点
    css a标签去除下划线
    Axure的热区元件的作用
    结组开发项目(TD学生助手)
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11931149.html
Copyright © 2011-2022 走看看