Maven+SpringBoot

1.Maven

Maven是⼀个项目管理工具。基于POM(Project Object Model,项目对象模型) 的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

即Maven是⼀个项目管理工具,通过 pom.xml 文件的配置获取 jar包,而不用手动去添加 jar 包。

Maven提供的功能非常多,主要体现在以下的两个方面:

  1. 项目构建
  2. 管理依赖

1.1 创建一个Maven项目

IDEA本身已经集成了Maven,我们可以直接使用,无需安装。

1.2 项目构建

Maven 提供了标准的,跨平台(Linux,Windows,MacOS等)的自动化项目构建方式

当我们开发了⼀个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,而 Maven 给我们提供了一套简单的命令来完成项目的构建。

如以下图中,是 Maven 的命令:

比如,双击 package,就可以完成项目的打包操作,打包就是把所有的 class文件,全部放在一起,打成jar 包 或者 war包 :

jar包 和 war包 都是⼀种压缩文件。

  • jar包就是把开发人员已经写好的⼀些代码进行打包,打好的 jar 包就可以引入到其他项目中,也可以直接使用这些 jar 包中的类和属性。另外也可以打成可执行 jar包,这样的包就可以通过 java -jar xxx.jar命令来执行。
  • war 包可以理解为是⼀个web项目,里面是项目的所有东西,通常用于网站。

1.3 依赖管理

上面说到,Maven是⼀个项目管理工具,通过 pom.xml 文件的配置获取 jar 包,而不用手动去添加jar 包。

而获取的 jar包 ,其实就是依赖。

  • pom.xml 就是maven 的配置文件,用以描述项目的各种信息

依赖配置

依赖:指当前项目运行所需要的 jar包。

如果是手动配置,通过以下的操作引入依赖:

File → Project Structure → Libraries → 点击 + → 选择 Java → 选择本地 JAR 文件,就能把外部类库引入项目使用。

例如,JDBC 需要引入 / 下载 mysql-connector-java 的包,并且添加到项目中,如果使用Maven,我们只需要在 pom.xml 中引入 mysql-connector-java 的依赖就可以了:

①在pom文件 <dependencies> 标签内,添加依赖坐标:

  • <groupId> 标签表示 组织ID
  • <artifactId> 标签表示 项目ID
  • <version> 标签表示 版本

②点击刷新按钮,引入新加入的依赖 jar包:

(后续有添加新的jar包,或者修改jar包版本,都需要通过该方式在项目中添加依赖)

右上角的刷新按钮:

或者:

③刷新完之后,就可以在项目中看到新加入的jar包:

1.4 依赖传递

早期我们没有使用 maven 时,向项目中添加依赖的 jar包,需要把所有的 jar包都复制到项目工程下。比如 A 依赖B,B依赖C,那么 A项目引入 B 的同时,也需要引⼊C,如果我们手动管理这个依赖,这个过程就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。

但使用 maven 的话,就可以避免管理所需依赖的关系。我们只需要在pom文件中,定义直接依赖就可以了,由于 maven 的依赖具有传递性,所以会自动把所依赖的其他 jar 包也⼀起导入。

如上图,项目A 通过 Maven 引入 Jar A 时,会自动引⼊ Jar B 和Jar C。

Jar A 和项目B 就是项目A 的直接依赖。Jar B,Jar C是间接依赖。

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

1.5 依赖排除

当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂。如上图中,如果项目A不需要Jar B,也可以通过排除依赖的方式来实现。

排除依赖: 指主动断开依赖的资源。(被排除的资源无需指定版本)

maven还有⼀些功能是依赖调解,可选依赖等

依赖调解:当项目中的依赖存在依赖冲突时,例如存在这样的依赖:

  • A->B->C->X(1.0)
  • A->D->X(2.0)

Maven会采用最短路径优先的原则去选择依赖,这里 2 的依赖路径更短,所以会选择X(2.0),当然我们也可以选择指定某个依赖的版本,也可以指定X的版本

1.6 Maven Helper 插件

当项目比较复杂时,我们就会有Jar包 冲突的问题,这时候就需要去解决依赖冲突。解决冲突之前,需要先找到冲突,我们可以使用 Maven Help 插件来观察包和包之间的依赖关系。

  • 插件(plugin) 就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展

安装插件:File -> Settings ->Plugins -> 搜索 'Maven Help' -> 找到对应插件,点击Install 安装即可,安装后需要重启下idea,才能生效。

重启 IDEA 后,在项目的下方看到这个,就说明下载成功了:

打开pom文件,可以看到Jar包之间的依赖关系:

可以右键排除掉⼀些依赖:


当然,想要排除上述的 protobuf.... ,也可以使用 <exclusions> 标签中排除依赖,注意无需指定版本号:

2. Maven 仓库

我们通过短短几行代码,就把依赖 jar 包放在了项目里,具体是如何做的呢?

这个代码,我们称之为 "坐标",也就是唯⼀的。 在Maven中,根据 groupId、artifactId、version 的配置,来唯⼀识别⼀个 jar 包,缺⼀不可。

当我们在pom文件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库里寻找 Jar包,并把他下载下来,添加到项目中。这个Jar包下载的地方就称为仓库。

仓库:用于存储资源,管理各种jar包。

Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。

Maven仓库分为两大类:本地仓库和远程仓库。其中远程仓库又分为中央仓库、私服 和 其他公共库。

2.1 本地仓库

本地仓库:自己计算机上的⼀个目录(用来存储 jar包),当项目中引入对应依赖 jar 包后,首先会查找本地仓库中是否有对应的 jar包

  • 如果有,则在项目直接引用
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库

本地仓库地址可以通过Maven配置查看:File -> Settings

查看该仓库目录,可以看到该目录下有很多的 jar (最开始是空的,随着Maven的使用,该仓库下文件会越来越多)

2.2 中央仓库

中央仓库:maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联网。Maven 团队维护,全球唯⼀。

仓库地址:https://repo1.maven.org/maven2/

如以下,是一堆的目录

可以通过 https://mvnrepository.com/ 这个网站来查询并下载。

我们可以把自己写好的Jar包上传到中央仓库(具备⼀定的要求),也可以从中央仓库下载Jar包。

查找Jar的坐标

①访问 https://mvnrepository.com/

②进行查找,比如mysql

③选择要添加的Jar包版本

④查看Jar包对应坐标

2.3 私有服务器(私服)

私服: ⼀般由公司团队搭建的私有仓库。私服属于某个公司,或者某个部门,往往需要⼀定权限。

有了私服之后,Maven依赖下载的顺序又发生了变化:

当Maven需要下载资源的时候:

  1. 先从本地仓库获取, 本地仓库存在, 则直接返回
  2. 如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回
  3. 如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了
  4. 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库里, 再为Maven的下载请求提供服务

私服是很多人在使用的,所以只需要第⼀个使用者下载⼀次就可以了。

2.4 Maven 设置国内源

因为中央仓库在国外,所以下载起来会比较慢,所以咱们选择借助国内⼀些公开的远程仓库来下载资源。接下来介绍,如何设置国内源。

①配置当前项目setting

②配置国内源:Maven 仓库默认在国外 https://mvnrepository.com/, 国内使用时会比较慢,我们可以更换为 阿里云 的仓库

也可以选择其他的仓库,参考:Maven 镜像地址大全

打开settings.xml, 在 mirrors 节点上,添加内容如下:

XML 复制代码
<mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirror>

③设置新项目的 settings.xml

上述配置的内容,只对当前项目生效,为了让后续新建的项目也生效,需要重新设置⼀下新项目的 Settings。

  • 当前项目和新项目共用⼀个setttings文件即可,所以新项目的设置,只需要确认⼀下settings文件的路径即可。

3. 第一个 SprintBoot 程序

在学习SpringBoot之前,我们先来认识⼀下Spring

我们看下Spring官方 (https://spring.io/) 的介绍

可以看到,Spring 让Java程序更加快速,简单和安全。Spring对于速度、简单性和生产力的关注使其成为世界上最流行的Java框架。Spring官方提供了很多开源的项目,覆盖范围从Web开发到大数据,Spring发展到了今天,已经形成了自己的生态圈。我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题。

这些项目都是基于Spring Framework 来进行开发的,但是Spring Framework存在配置多,入门难的问题,Spring 也意识到了这个问题,为了简化开发者的使用,从而创造性的推出了SpringBoot。

Spring Boot 的诞生是为了简化 Spring 程序开发的.

Spring Boot 翻译⼀下就是 Spring 脚手架,脚手架,就像以下图:

盖房子的这个架子就是脚手架,脚手架的作用是砌筑砖墙,浇筑混凝土、方便墙面抹灰,装饰和粉刷的,简单来说,就是使用脚手架可以更快速的盖房子。

而 Spring Boot 就是 Spring 框架的脚手架,它是为了快速开发 Spring 框架而诞生的

3.1 SpringBoot 项目的创建

3.1.1 使用网页创建

不使用 Idea 也可以创建 Spring Boot 项目,我们可以使用 Spring 官方提供的网页版来创建 Spring Boot 项目。

网页版创建项目先访问:https://start.spring.io,如下图所示:

点击获取代码按钮会下载⼀个 Spring Boot 的 zip 包,解压 zip 之后目录如下:

然后再使用 Idea 打开之后,Spring Boot 项目就算创建成功了。


3.1.2 使用 Idea 创建

Idea 社区版,要先安装 Spring Boot Helper 插件才能创建 Spring Boot 项目

可以从官网中下载插件,插件地址:https://plugins.jetbrains.com/plugin/18622-spring-boot-helper/versions

或者找到免费版本的,下载到本地,然后从本地磁盘上导入下载:

yi选择刚才下载的插件, 安装, 重启Idea即可。此时查看已安装插件安装好之后,它的名字就变成了 Spring Initializr and Assistant,如下图所示:

① 创建 SpringBoot 项目

选择 Spring Boot 版本,以及添加依赖项目:

最后点击选择路径,点击创建,即创建项目成功:

打开 pom 文件,记得将版本中的 release 删除掉:

删除之后记得刷新 Maven,如果发现并没有 Maven

那么可能 IDEA 没识别这是 Maven 项目,pom.xml 存在,但是 IDEA 没有把它识别成 maven 项目:

  • 在左侧项目树,右键 pom.xml
  • 选择 Add as Maven Project(添加为 Maven 项目)
  • ✅ 此时右侧 Maven 面板就会出现,自动加载项目依赖。

点击刷新,下载依赖。

问题:如以下的情况,刷新很多次,发现右部分的包下载不下来

那么此时有两种解决方式:

添加版本好,重新刷新:就下载下来了

或者先删除掉本地仓库,然后重新刷新下载:


到这里,pom 文件中没有再标红,那么说明下载依赖成功。

在上述创建的整个 Spring Boot 项目中,最重要的是以下的两个部分:

其他的都可以删除掉,如果有上传到 仓库的需求,可以保留 git 文件,而 .idea 文件夹 是 IDEA 项目启动后自动生成的,就算删除掉,等下次项目启动后也会重新下载:


② 项目代码和目录介绍

pom.xml文件里的具体信息,不需要过度关注,我们主要看 **<dependencies>**标签里面的内容:

pom文件中,引入了两个依赖:

  • spring-boot-starter-webmvc:包含了web应用开发所需要的常见依赖
  • spring-boot-starter-webmvc-test:包含了单元测试所需要的常见依赖

Spring Boot 项目有两个主要的目录:main 文件夹 和 test 文件夹:

📂 src/main 【业务主代码/Java源代码】

  • 放项目真正要运行的代码,程序打包、上线时,这部分会被编译进最终 jar 包。
  • src/main/java:写你的业务 Java 代码,控制器、实体类、service、启动类SpringbootDemoApplication都在这里。
  • src/main/resources:放配置文件,比如application.yml/application.properties、静态资源、配置 xml 等。

程序运行,实际执行的就是 main 下面的代码。

📂 src/test 【单元测试代码】

  • 专门放测试代码,用来写单元测试,测试你的业务逻辑是否正确。
  • src/test/java:写测试类,图里的SpringbootDemoApplicationTests就是自动生成的测试类。
  • src/test/resources:测试环境专用配置文件。

关键点:

  • 打包上线的时候,test 下面的代码不会打进 jar 包,只用于本地开发测试。
  • test 包里面可以直接访问 main 包里面写的类。
  • 运行测试只会执行 test 目录的代码,不会启动完整业务程序。
  • main:正经干活的代码,给用户用
    test:程序员自测用的代码,不上线
  • 举个例子:在main写一个查询用户的方法; 在test写测试方法,调用这个方法,验证返回结果对不对。

测试类:

启动类:

点击启动类的 main 方法运行第一个 SpringBoot程序:


③ 网页输出 Hello Spring Boot!

用 Spring Boot 来实现和浏览器及用户的交互,在创建的项目包路径下创建 HelloController类,实现代码如下:

HelloController 类 作用:这是 SpringBoot 的控制器(Controller)(Web 请求处理器),用来接收浏览器 / 客户端发过来的 http 请求,并直接返回一段文本作为响应。简单来说,它是一个"网络入口接待员"。

注解 解释(了解,接下来会学习):

  • @RestController:顶部注解,相当于给这个"接待员"贴了个身份标签,把这个类标记成接口控制器,它的方法返回的字符串不跳转页面,直接作为响应体返回给浏览器。
  • @RequestMapping("/hello"):方法上的注解,映射访问路径 ,相当于给方法贴了个"门牌号"。意思是,只要用户访问http://服务器地址:端口/hello这个路径,就执行这个 hello() 方法。
    • return "Hello SpringBoot!";(方法体):这是具体的"接待内容"。当请求到达时,这个方法会执行,并把字符串 "Hello SpringBoot!" 作为 HTTP 响应体返回给客户端。

完整流程:

  1. 启动 SpringbootDemoApplication 主程序
  2. 在浏览器地址栏输入:http://127.0.0.1:8080/hello(默认端口是8080)
  3. 触发 hello() 方法
  4. 直接在网页页面输出文字:Hello SpringBoot!

启动启动类:

在浏览器地址栏输入:http://127.0.0.1:8080/hello,然后就会看到文本:

当然,在注解 @RequestMapping(" ") 中的访问路径还可以套层,例如变成 @RequestMapping("/hello/zzz"):

重新启动主程序,如果还访问原来的 http路径,就会发现这个路径不存在:

需要正确访问它的路径:

3.2 Web 服务器

浏览器和服务器两端进行数据交互,使用的就是HTTP协议

前⾯我们已经学习了 HTTP 协议(【网络原理】HTTP/HTTPS协议-CSDN博客),知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据 的格式

Web 服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议 规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器, HTTP服务器,主要功能是提供网上信息浏览服务

常见的Web服务器有:Apache,Nginx, IIS, Tomcat, Jboss等。

SpringBoot 内置了Tomcat服务器, 无需配置即可直接运行,而Tocmat默认端⼝号是8080,所以我们程序访问时的端口号也是8080。

3.2.1 请求和响应分析流程

(详细看 【网络原理】HTTP/HTTPS协议-CSDN博客

浏览器输⼊URL之后, 发起请求, 就和服务器之间建立了连接:

浏览器:

  • 输入网址:http://127.0.0.1:8080/hello/sayhi
  • 通过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 的数据,发给浏览器。

服务器:

  • 接收到浏览器发送的信息(如:/user/sayhi)
  • 在服务器上找到 /user/sayhi 的资源
  • 把资源发送给浏览器

3.2.2 HTTP 状态码

① 404

404 表示用户访问的资源不存在,大概率是 URL 的路径写的不正确。

示例1:URL写错

示例2:注解写错

通过Fiddler观察Http请求

② 500

服务器出现内部错误,⼀般是服务器的代码执行过程中遇到了⼀些特殊情况(服务器异常崩溃)会产生这个状态码。

示例:

③ 无法访问此网站

⼀般是 Tomcat 启动失败了。

这种情况⼀般是服务未成功启动, 也就是tomcat未启动,或者IP/端口写错

打开 Fiddler 的话,页面是这样的:

关闭 fiddler 的话,是这样的:

4. 总结

Spring Boot 是为了快速开发 Spring 而诞生的,Spring Boot 具备:

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

Spring Boot 可使用 Idea 或网页创建,它的设计思想是约定大于配置,类上标注 @SpringBootApplication 就可以启动 Spring Boot 项目了。

相关推荐
2601_962203512 分钟前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理23 分钟前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
roman_日积跬步-终至千里1 小时前
【数据治理(6)】DataOps 不是调度工具,而是让数据产品长期可信的运行机制
java·服务器·网络
落魄大学生之流水线上谋生计1 小时前
LangGraph 基本用法指南
java·windows·python·langchain
2601_962128411 小时前
SpringBoot篇(缓存层)
java·spring boot·缓存
Dovis(誓平步青云)1 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
2501_937860942 小时前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
牛油果子哥q2 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
CodeStats2 小时前
《源纹天书》第三百六十三章至第三百六十四章
java·开发语言·源纹天书
万法若空2 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++