目录
[二、Maven 依赖管理](#二、Maven 依赖管理)
[2、排除依赖 exclusions](#2、排除依赖 exclusions)
[2.1 本地仓库](#2.1 本地仓库)
[2.2 中央仓库](#2.2 中央仓库)
[2.3 私有服务器(私服)](#2.3 私有服务器(私服))
[Maven 依赖查找顺序(有私服场景)](#Maven 依赖查找顺序(有私服场景))
[4 Maven 设置国内源](#4 Maven 设置国内源)
[4.1 配置当前项目的 setting](#4.1 配置当前项目的 setting)
[4.2 设置新项目的 setting](#4.2 设置新项目的 setting)
[4.1 Spring Boot介绍](#4.1 Spring Boot介绍)
[什么是Spring Boot](#什么是Spring Boot)
[4.2 Spring Boot项目创建](#4.2 Spring Boot项目创建)
一、创建你的第一个Maven项目
首先,idea有吧,然后先教你如何快速创建一个SpringBoot的程序。见下:

如图,打开项目后,

如图,填好项目名、项目位置、选择Maven,接着来看:
一般来说,打开后,会展现如下内容:

接着我来介绍一下:
首先需要了解的是

这个pom.xml的项目,是用来传递依赖的,那什么是"依赖"呢?
想像一下,你在吃饭,那你吃饭是不是需要盘子,那么吃饭时你的"盘子就是你的依赖",
所以在这里面就是放各种你运行Java代码所需要的各种第三方文件的。
至于从哪里导入,是关于"仓库"(这个下文解释)。
然后目光来看右侧:

这里有一系列的命令,
二这里我把豆包给的简要解释放到这里,大家可以参考:
Maven 生命周期,就是项目构建的一套固定执行流程,后面的命令执行会自动执行前面所有阶段。
- clean:清理,删除项目编译生成的 target 目录,把旧编译产物清空。
- validate:校验,验证项目配置、pom 文件是否合法。
- compile:编译,把 java 源代码编译成 class 字节码文件。
- test:测试,执行项目单元测试代码。
- package:打包,把编译后的代码打成 jar/war 包。
- verify:校验检查,对打包结果做完整性校验。
- install :安装,把打好的包保存到本地 Maven 仓库,供本机其他项目引用。
- site:生成项目文档站点。
- deploy:部署,把包上传到远程私服仓库,给团队其他人使用。
✨小知识点: 执行后面阶段会自动执行前面全部阶段,例如执行
install,会自动依次执行 validate → compile → test → package → verify → install。 日常开发最常用:clean、compile、package、install。
二、Maven 依赖管理
Maven 核心能力之一就是依赖管理 ,我们不再需要手动下载、复制 jar 包到项目中,全部通过pom.xml配置文件完成 jar 包的引入。
依赖:项目运行所需要的第三方 jar 包。
1、依赖坐标
每一个第三方 jar 包,都拥有唯一的依赖坐标,由三部分组成:
groupId:组织 / 公司 / 开源社区标识artifactId:项目、jar 包名称version:版本号
示例(MySQL 驱动):写完记得一定要右上角刷新(任意一个均可)

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
Maven 就会自动从仓库下载对应 jar 包到项目中。后续新增依赖、修改版本,都需要执行刷新。
2、排除依赖 exclusions
很多 jar 包会自带传递依赖,有时候传递过来的包会产生包冲突、依赖冲突 。 我们可以使用<exclusions>标签,把不需要的传递依赖排除掉。
比如说我这里想排除这个包:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:
exclusion里面不需要写 version ,只需要指定groupId和artifactId即可。
依赖排除本质上是为了防止版本的冲突,这里了解一下,暂时不需掌握太深入。
PS:这里还介绍一个插件--Maven Help,不过由于现在阶段排除依赖用的比较少,所以这里大家感兴趣的可以去装一下,流程也给你们:
三、Maven仓库
OK,这里再介绍一个必须了解的概念:本地仓库和远程仓库
1、Maven依赖坐标
我们通过短短几行代码,就把依赖jar包放在了项目里。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‑connector‑java</artifactId>
<version>8.0.30</version>
</dependency>
以上代码称之为坐标,坐标是唯一的。
在Maven中,根据groupId、artifactId、version的配置,来唯一识别一个jar包,三者缺一不可。
当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找Jar包,并把它下载下来,添加到项目中。这个Jar包下载存放的地方就称为仓库。
仓库:用于存储资源,管理各种jar包。
Maven仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。
2、Maven仓库分类
Maven仓库分为两大类:本地仓库 和远程仓库。 其中远程仓库又分为:中央仓库、私服 和其他公共库。
2.1 本地仓库
本地仓库就是自己计算机上的一个目录,用来存储jar包。
当项目中引入对应依赖jar包后,Maven首先会查找本地仓库中是否有对应的jar包:
对应方式如图:

- 如果有,则在项目直接引用
- 如果没有,则去远程中央仓库中下载对应的jar包到本地仓库
本地仓库地址查看方式(IDEA): File -> Settings
查看该仓库目录,可以看到该目录下有很多的jar。仓库目录初始是空的,随着Maven的使用,仓库下文件会越来越多。
本地仓库默认位置:



这里注意,强烈不建议放到C盘,否则容易爆满,建议改盘。
并且路径不要给我出现中文!
++改盘步骤:Ctrl+C与Ctrl+V把.m2文件复制到你想要改的文件路径上,然后修改下图的位置为新位置++
第一个是Maven配置文件(建议使用国内镜像):可以去网上找
我这里使用我自己的配置文件;
2.2 中央仓库
中央仓库是maven软件中内置一个远程仓库地址,服务于整个互联网,由Maven团队维护,全球唯一。
仓库地址:Central Repository:
可以通过网站:https://mvnrepository.com 来查询并下载jar包。 我们既可以把自己写好的Jar包上传到中央仓库(需要满足一定要求),也可以从中央仓库下载Jar包。
查找Jar的坐标步骤
1、访问 https://mvnrepository.com/
2、搜索需要的jar,例如搜索mysql

3、选择要添加的Jar包版本:
建议:在新的里面选择次新的,使用人数偏多的。

4、复制Jar包对应的maven坐标,粘贴到pom.xml的dependency中

实操小提示:选择版本的时候尽量避开存在漏洞(Vulnerabilities)的版本,优先选择使用量高、稳定的版本。
2.3 私有服务器(私服)
私服一般是公司、团队内部搭建的私有仓库,归属于公司或者部门,访问通常需要权限。 引入私服之后,Maven 依赖的下载查找顺序会发生改变。
Maven 依赖查找顺序(有私服场景)

- 先从本地仓库获取,如果本地仓库已经存在该 jar 包,直接使用。
- 本地没有,则向私服请求资源;私服有资源,直接返回。
- 私服也不存在,就去中央仓库下载;中央仓库也找不到,直接报错。
- 如果中央仓库存在资源,会先把资源缓存到私服,再缓存到本地仓库,供本次请求使用。
小提示:私服供团队多人共用,同一个 jar 包,团队只需要第一个人下载一次,其他人直接从私服拿取,提升团队开发效率。
整体流程:本地仓库 → 私服 → 中央仓库。
3、简单工作流程总结
- pom.xml编写依赖坐标;
- maven先去本机本地仓库找jar;
- 本地没有,就联网去中央远程仓库下载;
- 下载完成保存到本地仓库,项目直接引用本地仓库jar包。
4 Maven 设置国内源
Maven 默认的中央仓库部署在国外,国内直接访问下载 jar 包速度很慢,开发中一般会配置国内公开镜像源,加速依赖下载。
4.1 配置当前项目的 setting
IDEA 路径:File → Settings 在这里配置的 Maven 配置,仅对当前打开的项目生效。
4.2 设置新项目的 setting
上面的配置只作用于当前项目,如果希望之后新建的所有项目都使用同一套 Maven 配置,不用反复修改。 只需要让新项目共用同一个settings.xml配置文件,新建项目时确认 Maven 的settings.xml文件路径即可,无需重复编写镜像配置。


四、第一个SpringBoot程序
4.1 Spring Boot介绍
在学习SpringBoot之前,我们先来了解Spring框架。访问Spring官方网站:Spring | Home。
Spring官方对它的定位:Spring让Java编程变得更快、更简单、更安全。凭借对开发速度、简洁性与生产力的追求,Spring已经成为全球最流行的Java开发框架。

Spring生态下提供了大量开源项目,覆盖Web开发、安全、大数据、分布式系统等各个领域,形成了一套完整的技术生态圈,日常开发我们会优先选用Spring生态内的组件解决业务问题。
Spring生态主要项目

上面所有项目,底层都基于
Spring Framework。但是原生Spring Framework有一个很突出的痛点:配置繁琐、入门门槛高。 为了解决大量XML配置带来的麻烦,Spring推出了Spring Boot,用来简化Spring开发。
什么是Spring Boot
我们可以用生活中的脚手架来理解Spring Boot。 盖房子时,脚手架可以帮助工人砌墙、抹灰、装修,核心作用就是更快地把房子搭建出来。
Spring Boot就是Spring框架的脚手架,专门用来快速开发Spring应用程序。
在没有Spring Boot之前,使用原生Spring开发,我们需要手动引入一大堆依赖、编写大量xml配置文件,配置十分繁琐。 Spring Boot脚手架就是为了解决这个痛点而生,简化依赖管理、自动装配,大幅降低Spring的开发成本。
4.2 Spring Boot项目创建
使用Idea创建
因为我们用的Idea社区版(其他版本也同样适用),所以建议自己想办法去弄个专业版。


新建项目,进入项目配置页面,需要填写项目的各项基础属性。
项目配置参数说明(豆包提供,仅供参考)
| 参数 | 示例值 | 说明 |
|---|---|---|
| Group Id | com.example |
组织ID,一般写公司/个人反向域名,代表项目所属组织 |
| Artifact Id | demo |
项目ID,当前项目的模块名称 |
| Version | 0.0.1‑SNAPSHOT |
项目版本,SNAPSHOT代表快照(开发测试版本) |
| Project type | Maven | 项目构建类型,这里选择Maven管理项目 |
| Language | Java | 开发语言,Spring Boot主流使用Java |
| Packaging | Jar | 打包方式,Spring Boot项目一般使用Jar包 |
| Java version | 17 | JDK版本,要和本地安装的JDK保持一致 |
| Project name | demo | 项目名称,本地文件夹显示的名字 |
| Project description | Demo project for Spring Boot | 项目描述,对项目的简单说明 |
| Package name | com.example.demo | 项目包名,由GroupId+ArtifactId组合而成 |
配置完成之后点击Next,继续选择项目需要引入的依赖,确认之后即可生成Spring Boot工程。

选择我框起来的那两个之一,不要用snapshot即可

我们做Web开发,所以使用Web项目,
创建内部
之后可以看到一个默认的启动类

然后我们可以创建我们的第一个Springboot程序:

然后下面你先模仿的来写,后期会解释各个注释的意思:

OK,现在可以随便打开一个浏览器了,然后再输入框输入:

回车一下:

注意,只留src和pom文件即可

这个也删了:

五、jar包下载不下来该咋办?
这里附上一张图:

不过小罗我目前没有遇到过这种情况,这个也是我在网上找的方法,大家可以去尝试。
六、Spring Boot项目目录
Spring Boot可使用Idea或网页创建,它的设计思想是约定大于配置,类上标注@SpringBootApplication就可以启动Spring Boot项目。

Spring Boot项目有两个主要的目录:
src/main/java:Java 源代码src/main/resources:为静态资源或配置文件/static:静态资源文件夹,比如前期学的js,css,html等静态文件,不需要服务器数据进行绑定的页面/templates:模版资源文件夹,主要存放动态模板文件,比如JSP,Freemarker,Thymeleaf等需要服务器动态渲染数据的文件
src/test/java:测试代码源代码target:编译后的文件路径pom.xml:maven配置文件
七、Web服务器
浏览器和服务器两端进行数据交互,使用的就是HTTP协议。

前面我们已经学习了 HTTP 协议,知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式。 Web服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器,HTTP服务器,主要功能是提供网上信息浏览服务。
常见的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等。
SpringBoot内置了Tomcat服务器,无需配置即可直接运行。 Tomcat默认端口号是8080,所以我们程序访问时的端口号也是8080。
八、请求响应流程分析
浏览器输入URL之后,发起请求,就和服务器之间建立了连接。

浏览器
输入网址:http://127.0.0.1:8080/hello
- 通过IP地址
127.0.0.1定位到网络上的一台计算机,127.0.0.1就是本机。 - 通过端口号
8080找到计算机上对应的进程,也就是在本地计算机中找到正在运行的8080端口的程序。 /user/sayhi是请求资源位置- 资源:对计算机而言资源就是数据
- web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)
http://127.0.0.1:8080/user/sayhi,就是向本地计算机中的8080端口程序,获取资源位置是/user/sayhi的数据。 8080端口程序,在服务器找/hello位置的资源数据,发给浏览器。
服务器
- 接收到浏览器发送的信息(如:
/user/sayhi) - 在服务器上找到
/user/sayhi的资源 - 把资源发送给浏览器
九、访问出错怎么办

9.1 404
404表示用户访问的资源不存在。大概率是URL的路径写的不正确。
- 错误实例1:url单词拼错
- 错误实例2:注解写错 使用
@Controller,没有搭配@ResponseBody,访问接口也会报404。
9.2 500
服务器出现内部错误。一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码。 示例代码:
@RestController
public class UserController {
@RequestMapping("/sayHi")
public String sayHi(){
int res = 10/0;
return "hello,Spring";
}
}
代码出现除零异常,访问就会返回500状态码。
9.3 小结
最开始学习Spring的时候,会遇到很多问题,更多是环境相关的问题。 我们不仅要学习 Spring 代码的基本写法,更重要的是学习排查错误的思路。
程序猿调试BUG如同医生诊病。 一个有经验的程序猿和一个新手程序猿相比,最大的优势往往不是代码写的多好,而是调试效率有多高。同一个问题可能新手花了几天都无法解决的,但是有经验的程序猿可能几分钟就搞定了。
熟悉 HTTP 协议能让我们调试问题事半功倍。
- 4xx的状态码表示路径不存在,往往需要检查 URL 是否正确,和代码中设定的 Context Path 以及 Servlet Path 是否一致。
- 5xx的状态码表示服务器出现错误,往往需要观察页面提示的内容和 Tomcat 自身的日志,观察是否存在报错。
- 出现连接失败往往意味着服务没有正确启动,也需要观察服务的自身日志是否有错误提示。
观察日志是调试程序的重要途径。系统日志往往很多,需要同学们耐心阅读,经常阅读,熟练了就能更快速的找到问题了。

十、总结
Spring Boot 是为了快速开发 Spring 而诞生的,Spring Boot 具备:
- Spring Boot 提供了启动添加依赖的功能,可以快速集成框架。
- 内置web服务器,无需配置 Tomcat 等Web服务器,直接运行和部署程序。
- 可以完全抛弃繁琐的 XML,使用注解和配置的方式进行开发。
- 支持更多的监控的指标,可以更好的了解项目的运行情况等特点。






