Maven不用install也能跑Spring Boot?你知道为什么吗?

软件求生 5天前 阅读数 0 #科技



话说,今天在公司,刚入职的小明跑过来,眼神中带着一种莫名的敬佩:“小米哥,我遇到个事,怎么都想不通!新拉的Spring Boot项目,Maven居然不用install,直接运行mvn spring-boot:run就可以启动服务,这是为啥呀?”

我听完,笑了笑:“这事儿啊,别急,来,咱们坐下,给你慢慢讲讲。”

咱们先聊聊Maven的构建流程

小明有点蒙,挠挠头:“不是,我一直以为Maven都得先mvn clean install才能打包呢,咋就能直接运行了?”

我拍拍他的肩膀,递了杯奶茶:“其实吧,Maven的构建流程就像是在搭积木,有一套严格的生命周期。每个生命周期其实就是一个阶段的集合。咱们常用的有三大生命周期:clean、default、site。”

1. Clean生命周期:

负责清理项目中以前的构建成果,比如删除target目录。

2. Default生命周期:

这是个大头,包含编译、测试、打包、安装、部署等一系列阶段。比如:

compile:编译源代码

test:运行测试

package:打包(通常是jar或war文件)

install:将打包成果安装到本地仓库

deploy:部署到远程仓库

3. Site生命周期:

用于生成项目站点文档,通常开发中不太用。

直接运行是个啥原理?

“所以,小明,”我放下奶茶,继续说道:“其实你觉得奇怪是因为你把mvn clean install和mvn spring-boot:run混为一谈了。”

1. spring-boot:run到底是干嘛的?

这个命令其实属于Maven插件,叫做spring-boot-maven-plugin,它有一个特性,就是可以直接运行应用,而不依赖于先打包。

2. spring-boot:run工作流程

当你执行mvn spring-boot:run时,Maven其实走了这样几个步骤:

编译源代码:就是运行mvn compile

运行应用:直接用编译后的类文件启动,而不是通过打包后的jar文件。

重点来了!

spring-boot:run直接利用target/classes下的编译文件运行应用,所以你不需要install就能跑起来!

项目拉下来直接运行的秘密:插件和依赖

小明眉头一皱:“可是,这跟我直接拉下来就能跑有啥关系?”

我笑着说:“这就要聊聊pom.xml里那个spring-boot-maven-plugin插件了。”

1. spring-boot-maven-plugin的配置

一般在Spring Boot项目的pom.xml中会有这样的配置:

这个插件在运行时,会自动检查项目中的依赖,并且通过Maven的依赖管理机制将依赖下载到本地。

因此,即使你没有install,Maven依赖会自动加载到本地仓库中。

2. 本地仓库的作用

当你运行mvn spring-boot:run时,它会:

检查依赖是否存在本地仓库

如果不存在,则自动下载

将依赖加载到classpath中,启动应用

换句话说,只要依赖能够成功下载,就能启动服务!

对比:install和run有啥区别?

为了让小明彻底明白,我做了个对比:

场景演示:开发中的快速启动

“我带你试试!”我笑着点开控制台,演示了两个常见场景。

1. 直接运行:

应用正常启动。

2. 打包运行:

应用同样正常启动。

3. 安装运行:

这一步是把包放到本地仓库后再启动,通常用于其他项目依赖的场景。

结尾:程序员的顿悟

小明终于恍然大悟:“原来是这样啊!不用install是因为spring-boot:run直接运行的是编译文件而不是打包文件!”

我点了点头:“对,就是这样。开发中,我们经常用mvn spring-boot:run,因为它省略了安装步骤,加快了本地开发的效率。而install通常在构建发布时用。”

小明感激地看着我:“谢谢小米哥,果然程序员还是得多和大神聊聊!”

我笑了:“多聊,多学,咱们一起进步嘛!”

END

其实,Spring Boot项目能直接运行,正是因为它的插件机制和类加载方式,搞清楚Maven的生命周期和插件原理,才能真正做到心中有数。以后别见啥就install啦,开发效率提升可是件大事儿!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

软件求生

软件求生

从事软件开发,分享“技术”、“运营”、“产品”等。