SpringBoot的maven插件生成可以直接启动的jar

简单使用

复制<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 表示可以直接启动 默认为 false -->
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

package 之后生成一个 jar 包

直接启动

这个 jar 我们可以直接启动执行,不需要 java -jar 这种方式

复制./spring-messagequeue-1.0-SNAPSHOT.jar

原理分析

maven 中添加如下依赖,这样我们就可以看到 SpringBoot plugin 打包的源码了

复制<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-loader</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
</dependency>
  1. 读取 plugin 配置,判断 executable 是否为 true
  2. 如果为 true,读取 org/springframework/boot/loader/tools/launch.script 启动文件
  3. 将启动脚本文件写入到目标 jar 开头,并设置权限为可执行
  4. 接下来继续将编译后的 class 及配置文件写入到目标 jar

我们可以通过 cat 或 more 命令来查看下最终生成的 jar 文件内容

这些信息就是 launch.script 文件的内容。

启动脚本是从环境变量或者固定目录来获取到 java 执行器的。至于 shell 文件和 jar 文件为什么能合并为一个文件,且执行不报错,这个原理暂时还不知道。

参考

springboot应用启动原理(一) 将启动脚本嵌入jar

posted @   strongmore  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示