Maven 基础与 Spring Boot 入门:环境搭建、项目开发及常见问题排查

1. 环境准备 检查dea版本:

社区版: 2021.1-2022.1.4

Idea 卸载参考: https://blog.csdn.net/qq_19072921/article/details/126408402(⼀定要删除注册表)

2. Maven

2.1 什么是Maven

官方对于Maven的描述

官方对于Maven的描述:

ApacheMavenisasoftwareprojectmanagementandcomprehensiontool. Basedonthe concept of aproject object model (POM), Mavencanmanageaproject'sbuild,reporting and documentation fromacentral piece of information.

引用来自:https://maven.apache.org/index.htm

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

大白话:Maven是⼀个项目管理工具,通过pom.xml文件的配置获取jar包,⽽不要手动去添加jar包

2.2 为什么要学Maven

一句话:简单,方便,提高我们的开发效率,减少我们的开发Bug.

Maven提供的功能非常多,Maven在咱们课程中的体现主要是以下两个方面:

  1. 项目构建

  2. 管理依赖

2.3 创建⼀个Maven项目

IDEA本身已经集成了Maven,我们可以直接使用,无需安装 以下截图的idea版本为: 2022.1.4,不同版本的idea界面展示会有所不同

点击Create,就创建好了⼀个Maven项目

2.4 Maven核心功能

接下来,我们结合项目,介绍Maven在项目开发中的作用. 主要体现在两个方面:

  1. 项目构建

  2. 管理依赖

2.4.1 项目构建

Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的自动化项目构建发生 当我们开发了⼀个项目之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过 这些流程,如果代码反复调试修改,这个流程就需要反复进行,就显得特别麻烦,,而Maven给我们提供了 ⼀套简单的命令来完成项目的构建.

比如,点击package,就可以完成项目的打包操作

  • JAR 包(Java Archive)

    • 本质是包含多个.class 文件、资源文件(如配置文件、图片等)的压缩包,基于 ZIP 格式。
    • 除了作为类库供其他项目引入(通过添加依赖),可执行 JAR 包内置了主类信息(在 META-INF/MANIFEST.MF 中指定 Main-Class),因此能直接用java -jar命令运行,适合独立的 Java 应用程序。
    • 还可用于打包服务接口(如 SOA 服务)、工具类等,用途更通用。
  • WAR 包(Web Application Archive)

    • 专为 Web 应用设计,结构遵循 Servlet 规范,包含 Web 项目的所有资源:.class 文件、JSP、HTML、CSS、JavaScript、配置文件(web.xml 或 Spring Boot 的 ServletInitializer)、依赖的 JAR 包(通常在 WEB-INF/lib 下)等。
    • 不能直接用java -jar运行,需要部署到 Web 服务器(如 Tomcat、Jetty)中,由服务器解析并运行其中的 Web 应用,适合开发网站、Web 服务等。

2.4.2 依赖管理

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

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

:指当前项目一下所需要的jar包. 比如前面学习JDBC时,我们需要手动下载mysql-connector-java的包.并且添加到项目中

如果使用Maven,我们只需要在pom.xml中引入 mysql-connector-java的依赖就可以了

java 复制代码
 <dependencies>
 <!-⾥⾯放置项⽬的依赖坐标, 可为多个 --> 
</dependencies
  1. 点击刷新按钮,引入新加入的依赖jar包

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

  1. 刷新完之后,就可以在项目中看到新加⼊的jar包

依赖传递

早期我们没有使用maven时,向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下.

比如A依赖B,B依赖C, 那么A项目引⼊B的同时,也需要引入C,如果我们手动管理这个依赖,这个过程 就会比较麻烦,我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的

比如我们要吃火锅,需要有锅,有调料,有⻝材,以及确认什么样的锅,什么样的食材. 比如去医院看病,需要带上以往的病历,检查结果,处方等,并且要确认带的资料是正确的,如果日期错 了,或者患者错了,带少了,就需要回去重新拿.

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

比如吃火锅,现在我们可以点⼀个海底捞外卖,直接就把所有食材都送过来了,包括什么锅,配什么菜. 比如去医院看病,借助"互联网",实现了信息共享,只需要带上身份证,以往的病历和检查结果就都可以 看到了

如上图,项目A通过Maven引入JarA时,会自动引入JarB和JarC.

Jar A和项目B就是项目A的直接依赖.

Jar B, Jar C是间接依赖.

直接依赖:在当前项目中通过依赖配置建立的依赖关系

间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖排除 当前阶段我们需要依赖的库并不多,但随着项目的越来越复杂,库之间的依赖关系也会变得越来越复杂.

如上图中,如果项目A不需要JarB,也可以通过排除依赖的方式来实现.

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

比如,我下了⼀个快递单子,默认会有⼀个服务,就是快递小哥会上门取件,但是我刚好要出门,而且顺 路经过站点,也可以选择自己送过去

java 复制代码
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>6.0.6</version>
 <!-排除依赖--> 
<exclusions>
 <exclusion>
 <artifactId>spring-jcl</artifactId>
 <groupId>org.springframework</groupId>
 </exclusion>
 </exclusions>
 </dependency>

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

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

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

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

当然也可以指定X的版本

2.4.3. Maven Help插件

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

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

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

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

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

2.5 Maven仓库

java 复制代码
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.30</version>
 </dependency>

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

这个代码,我们称之为"坐标",也就是唯⼀的.

在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个jar包,缺⼀不可.

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

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

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

Maven仓库分为两大类:

本地仓库和远程仓库.

远程仓库又分为中央仓库,私服和其他公共库

2.5.1 本地仓库

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

• 如果有,则在项目直接引用

• 如果没有,则去中央仓库中下载对应的jar包到本地仓库

本地仓库地址可以通过Maven配置查看

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

不光这里改还有一个地方

2.5.2 中央仓库

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

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

可以通过 https://mvnrepository.com这个网站来查询并下载 我们可以把自己写好的Jar包上传到中央仓库(具备⼀定的要求), 也可以从中央仓库下载Jar包

查找Jar的坐标

  1. 访问https://mvnrepository.com/

  2. 进行查找,比如mysql

这个在JDBC 数据库中已经操作过了,参考该论文

https://blog.csdn.net/HANhylyxy/article/details/153940775

2.5.3 私有服务器,也称为私服

私服:⼀般由公司团队搭建的私有仓库. 私服属于某个公司,或者某个部门, 往往需要一定权限. 有了私服之后,Maven依赖下载的顺序又发生了变化

当Maven需要下载资源的时候

  1. 先从本地仓库获取,本地仓库存在,则直接返回

  2. 如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回

  3. 如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了...

  4. 如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库里,再为Maven的下载请求提供服务私服是很多人在使用的,所以只需要第⼀个使用者下载一次就可以

2.6 Maven设置国内源

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

2.6.1 配置当前项目setting File-> Settings
  1. 查看配置⽂件的地址,如上图所示、,Maven配置文件地址为: D:\Maven\.m2\settings.xml

不同电脑设置的Maven路径不同

settings和repository 可以修改设置为其他路径,两个路径不要有中文

  1. 配置国内源 Maven仓库默认在国外https://mvnrepository.com/,国内使用时会比较慢,我们可以更换为阿里云的仓库 也 可以选择别的仓库,参考: Maven镜像地址大全 打开 settings.xml, 在mirrors节点上,添加内容如下:
java 复制代码
 <mirror>
 <id>aliyunmaven</id>
 <mirrorOf>central</mirrorOf>
 <name>阿⾥云公共仓库</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>

2.6.2 设置新项目的setting

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

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

3.第⼀个SpringBoot程序

3.1 SpringBoot介绍

在学习SpringBoot之前,我们先来认识⼀下Spring 我们看下Spring官方(https://spring.io/)的介绍

可以看到,Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和生产力的关注使其成为 世界上最流行的Java框架。

Spring官方提供了很多开源的项目,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了自己的生态圈.我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题

3.2 Spring Boot项目创建

3.2.1 使用Idea创建 因为我们用的Idea社区版(其他版本也同样使用),所以先要安装SpringBootHelper插件才能创建 Spring Boot 项目

安装SpringBootHelp插件

如果你没有,就找到这里从硬盘里找到这个插件,但是不要加压,就以压缩包的形式进行下载

注意:这里建议你跟安装包放到一起,删的时候就一块删除了

想要的给我评论,博主看到了一一发

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

不要点击 update!!!

创建项目,出现这个就是安装成功了

接下来我们来创建SpringBoot项目:

File-> New->Project 上图说:

注意:在这里的如果你重新选择路径的话,他是不包括你的这个文件的路径的

记得在他后面补上你的文件

创建好了,你需要点击右下角这个

报错日志,说明是阿里云的的仓库没有配对正确

但是社区版有一个坑,就是你需要在pom文件中,删除.release 就是上面报错的原因

然后就等着把

在寻找这个,并且点击根据这个路径找到,所在中央仓库的位置

中央仓库的release 的版本,直接

没有.release,要删除,删除后是这样子的

这个问题解决了,我们还有一个问题就是,还有的配置文件是报错的

我们给他加上一个版本号

不太建议使用版本号,我刷新也可以解决此问题

Spring Boot 项目有两个主要的目录:

• src/main/java: Java源代码

• src/main/resources: 为静态资源或配置⽂件:

◦ /static:静态资源文件夹,比如前期学的js,css,html等静态文件,不需要服务器数据进行绑定的页面

◦ /templates:模版资源文件夹,主要存放动态模板⽂件,比如JSP,Freemarker,Thymeleaf等需 要服务器动态渲染数据的文件

• src/test/java: 测试代码源代码

• target: 编译后的文件路径

• pom.xml:maven配置文件

书写

3.3Web服务器

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

前面我们已经学习了HTTP协议,知道了HTTP协议就是HTTP客⼾端和HTTP服务器之间的交互数据 的格式.

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

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

SpringBoot 内置了Tomcat服务器,无需配置即可直接运行

Tocmat默认端口号是8080,所以我们程序访问时的端口号也是8080

3.4请求响应流程分析

浏览器输⼊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的资源

• 把资源发送给浏览器

3.5 访问出错怎么办

3.8.1 404

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

错误实例1:url单词拼错

错误实例2:注解写错

java 复制代码
@Controller
public class UserController {
@RequestMapping("/sayHi")
public String sayHi(){
return "hello,Spring";
}
}

通过Fiddler观察Http请求

3.5.2 500

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

错误实例:

java 复制代码
@RestController
public class UserController {
}
@RequestMapping("/sayHi")
public String sayHi(){
int res = 10/0;
return "hello,Spring";
}

重启Tomcat服务器.

重新访问页面,可以看到:

3.8.3 无法访问此网站

⼀般是Tomcat启动失败了

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

本篇博客的内容就结束了,下篇内容更精彩,敬请期待!!!

结束告语:

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=axrpm3qbr36

相关推荐
侠客在xingkeit家top1 小时前
SpringCloudAlibaba高并发仿斗鱼直播平台实战(完结)
后端
特拉熊1 小时前
23种设计模式之桥接模式
java·架构
半瓶榴莲奶^_^1 小时前
后端Web进阶(AOP)
java·开发语言
Gopher_HBo1 小时前
Go语言数据结构和算法(二十四)基数排序算法
后端
麻辣烫不加辣1 小时前
跑批调额系统说明文档
java·后端
一只乔哇噻1 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day61)
java·开发语言·学习·算法·语言模型
拾忆,想起1 小时前
Dubbo服务降级全攻略:构建韧性微服务系统的守护盾
java·前端·网络·微服务·架构·dubbo
速易达网络1 小时前
ASP.NET MVC 前后端商城系统介绍
后端·asp.net·mvc
inrgihc1 小时前
Spring Boot 注册 Servlet 的五种方法
spring boot·后端·servlet