首页 > 其他分享 >SpringBoot的maven插件生成可以直接启动的jar

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

时间:2024-02-06 09:22:55浏览次数:31  
标签:插件 SpringBoot plugin jar 启动 boot maven org

简单使用

<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

标签:插件,SpringBoot,plugin,jar,启动,boot,maven,org
From: https://www.cnblogs.com/strongmore/p/17978326

相关文章

  • Android Studio 中使用uiautomatorviewer插件
    在Android设备中,各种的组件如何分布以及控件的具体信息如何查看呢。在AndroidStudio中有一个可以查看的插件,本篇文章就介绍这个插件的使用- uiautomatorviewer.bat1.综述  AndroidStudio是Google官方提供的一款用于开发Android应用程序的集成开发环境(IDE),它基于IntelliJIDEA......
  • MyBatis使用分页插件
    MyBatis使用分页插件PageHelper是国内非常优秀的开源mybatis分页插件,它支持基本主流与常用的数据库,例如:mysql、Oracle、DB2等。PageHelper在GitHub的项目地址:https://github.com/pagehelper/Mybatis-PageHelper分页插件的原理(1)在MyBatis执行SQL语句之前,拦截器可以获取SQL......
  • springboot整合redis的哨兵模式
    在SpringBoot中整合Redis的哨兵模式涉及到配置SpringBoot应用程序以连接到Redis哨兵集群。哨兵模式是Redis的一种高可用解决方案,它提供了自动故障转移功能,可以在Redis主节点发生故障时自动将一个从节点升级为新的主节点。步骤1:安装并配置Redis哨兵集群首先,您需要在您的服务器上......
  • Springboot在编写CRUD时,访问对应数据函数返回null
    1.我遇到了什么问题我在学习springboot,其中在编写CRUD时发现访问数据的函数执行下去返回值是null但是其它部分正常。下面是我的错误代码pojopublicclassBot{@TableId(type=IdType.AUTO)privateIntegerid;privateIntegeruser_id;privateStr......
  • eviacam在Arch/Manjaro Linux下的安装
    安装base-devel安装编译工具,默认的依赖里没有编译工具sudoyay-Sbase-devel如果安装编译工具,会报类似下面的错误:安装eviacamyay-Seviacam这里主要是用AUR的方式来顺便把依赖安装了,也可以手动安装依赖,然后Clone源码这一步会报类似下面的错误:根据错误提示修......
  • docker 启动jar包
    1、编写Dockerfile文件FROMopenjdk:8ENVTZ="Asia/Shanghai"ADDcim-gisportal.jarcim-gisportal.jarADDnohup.outnohup.outENTRYPOINT["nohup","java","-jar","/cim-gisportal.jar",">nohup.out&&quo......
  • Springboot整合redis配置详解
    Springboot整合redis配置详解1.导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.编写properties或者yml配置#Redis本地服务器地址,注意要开启redis服务,即那个redis-s......
  • SpringBoot可以同时处理多少请求?
    正文我们都知道,SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,到不如说Tomcat可以处理多少请求。关于Tomcat的默认配置,都在spring-configuration-metadata.json文件中,对应的配置类则是org.springframework.b......
  • spring-boot-maven-plugin maven-compiler-plugin springboot demo
     <build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-......
  • Spingboot替换掉jar包里面的@Bean
    问题如下图,我们需要替换掉JsoncCfg配置类里面的YCloudObjectMapper这个Bean。这个Bean是在依赖的第三方jar包中的,因为用了@Bean而不是像@Component这种组件扫描添加的,所以不能使用@ComponentScan注解进行排除。现在不能修改jar包里的代码,不能在我们的项目中重新定义那个bean(Be......