spring-boot-loader执行Jar文件原理

本文详细介绍了Spring Boot Loader的工作原理,包括它的简介、优势,以及可执行jar文件的结构。Spring Boot Loader使得应用程序能够被打包为可执行jar,解决了Java中加载嵌入式jar文件的问题和冲突。文章还揭示了spring-boot-loader如何通过MANIFEST.MF文件的Main-Class和Start-Class属性来启动应用,并解释了JarLauncher如何支持从jar和文件系统的两种启动方式。
摘要由CSDN通过智能技术生成

1.spring-boot-loader简介

​ spring-boot-loader模块让你的springboot应用具备打包为可执行jar或war文件的能力。只需要引入Maven插件或者Gradle插件就可以自动生成。

2.spring-boot-loader的优势

​ Java中并没有标准的方法加载嵌入式的jar文件,通常都是在一个jar文件中。这种情况下,如果你要通过命令行的形式发布一个没有打包的独立程序的话,可能会出现问题。

​ 为了解决这种问题,很多开发人员将所有的class文件都打包为一个jar文件,然后依赖其他的jar文件。但是这种方式下,开发人员很难去判断哪个依赖的文件库是被程序真正使用到的。更普遍的问题是,在不同的jar文件中,如果有相同名称的文件则会冲突。(这里说明一下,在传统的可执行jar文件中会有/META-INF/MANIFEST.MF文件,这里主要介绍两个属性:Main-Class和classpath,Main-Class是可执行jar的启动类,classpath则可以指定依赖的类库。)

3.springboot可执行jar文件结构

读者可以自行编写一个简单的springboot应用,然后用Maven插件打包。

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-BOOT-INF
    +-classes
    |  +-mycompany
    |     +-project
    |        +-YourClasses.class
    +-lib
       +-dependency1.jar
       +-dependency2.jar
  • META-INF : 存放应用相关的元信息,如MANIFEST.MF文件。
  • BOOT-INF/lib: 存放应用依赖的jar包。
  • BOOT-INF/classes:存放应用编译后的class文件。
  • org:存放springboot相关的class文件。

熟悉Java EE的读者可能会发现,其中目录BOOT-INF下的classes和lib和WEB-INF下的classes和lib相似。但是为什么可以通过命令行的方式去执行Jar文件呢?

4.spring-boot-loder原理

springboot应用可执行jar文件被java -jar 命令执行时,还是要按照Java官方文档的规定,命令的启动类必须配置在MANIFEST.MF文件的Main-class属性。

查看springboot应用jar包中的MANIFEST.MF发现:

Main-Class: org.springframework.boot.loader.JarLauncher

可执行JAR文件启动器-Jarlauncher

首先,在pom.xml中添加spring-boot-loader依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-loader</artifactId>
    <scope>provided</scope>
</dependency>

在IDEA中,双击shift搜索Jarlauncher

public class JarLauncher extends ExecutableArchiveLauncher {
   
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值