当前位置: 代码网 > it编程>编程语言>Java > springboot命令java -jar执行流程

springboot命令java -jar执行流程

2025年08月11日 Java 我要评论
一 打包1.1 命令mvn clean package使用命令打包,jar文件路径:target/*.jar1.2 包结构spring-0.0.1-snapshot.jar├── meta-inf│

一 打包

1.1 命令

mvn clean package

使用命令打包,jar文件路径:target/*.jar

1.2 包结构

spring-0.0.1-snapshot.jar
├── meta-inf
│   └── maven(主要是pom文件)
│   └── manifest.mf
├── boot-inf
│   ├── classes
│   │   └── 应用程序类
│   └── lib
│       └── 第三方依赖jar
└── org
    └── springframework
        └── boot
            └── loader
                └── springboot启动程序

application.yml
com/
meta/inf/
*.properties

application.yml:应用配置参数信息
com文件夹:编译后的class文件
manifest.mf 清单文件
manifest.mf:应用jar打包信息
org:来自spring-boot-loader(用于项目的打包和加载)jar包编译之后的内容
start-class: com.meishi.sales.salesbootstrap springboot 提供的类加载器 也就是@springbootaplication注解标示的类
main-class: org.springframework.boot.loader.jarlauncher 程序启动入口类

二 执行流程

2.1 依赖

<!-- spring-boot-loader-->
<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-loader</artifactid>
    <scope>provided</scope>
</dependency>

2.2 jarlauncher

jarlauncher 程序启动入口类 将其对应jar加载到内存中 类路径下

public class jarlauncher extends executablearchivelauncher {
	static final string boot_inf_classes = "boot-inf/classes/";
	static final string boot_inf_lib = "boot-inf/lib/";
	//在父类方法中创建了归档文件
	public jarlauncher() {
	}
	protected jarlauncher(archive archive) {
		super(archive);
	}
	@override
	protected boolean isnestedarchive(archive.entry entry) {
		//如果是一个目录
		if (entry.isdirectory()) {
			//如果返回的目录名字 != "boot-inf/classes/"
			return entry.getname().equals(boot_inf_classes); 
		}
		//如果是一个文件 是不是以"boot-inf/lib/" 开头
		return entry.getname().startswith(boot_inf_lib);
	}
	public static void main(string[] args) throws exception {
		//先通过无参构造判断是否为jar再创建归档文件archive再调用父类launcher的launch方法
		new jarlauncher().launch(args);
	}
}

2.3 总结

1、spring jar包启动时springboot会扫描配置清单的main-class指定的类执行其springboot-loader这个启动包的jarlauncher的main方法
2、去扫描 boot-inf 中的classes包和lib包 存储到list集合当中。
3、将自定义的加载类launchedurlclassloaderset到上下文去加载对应class 到jvm当中4、在通过start-class指定的springbootappliction类获取到当前springboot的 启动类 5、通过反射获取到main的这个方法然后invoke启动

到此这篇关于springboot命令java -jar执行流程的文章就介绍到这了,更多相关springboot java -jar内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com