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

  • 相关阅读:
    Row not found or changed. Linq 找不到行或行已更改
    A Session Like ViewState
    WatiN Test Recorder 录制操作的工具
    How to render the  " " in dropdownlist
    My validator 0.1 不支持 ajax 环境
    IDEAL (银行支付接口)如何搞定证书
    Hibernate generator小结
    java 过滤文件
    XML解析
    spark+openfire插件开发(RTX类似的组织架构)
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11931149.html
Copyright © 2011-2022 走看看