1.Maven
1.1 什么是Maven
翻译过来就是:
Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通 过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。
可以理解为:Maven是一个项目管理工具,通过pom.xml文件的配置来获取jar包,而不用手动去添加jar包。
1.2 为什么学习Maven
特点:简单,方便,提高我们的开发效率,减少我们的开发bug。
并且,Maven提供的功能非常多,主要有:1.项目构建,2.管理依赖。
1.3 创建一个Maven项目
IDEA本⾝已经集成了Maven,我们可以直接使用,无需安装。
不同版本的idea界面展示会有所不同,以下截图idea版本为2024.1
这样我们就创建好了一个Maven项目。
1.4 Maven核心功能
详细讲解Maven在项目开发中的作用。
1.项目构建
2.管理依赖
1.4.1 项目构建
Maven提供了标准的,跨平台(Linux,Windows,MacOS等)的⾃动化项⽬构建⽅式,当我们开发了⼀个项⽬之后,代码需要经过编译,测试,打包,发布等流程,每次代码的修改,都需要经过这些流程,如果代码反复调试修改,这个流程就需要反复进⾏,就显得特别麻烦,而Maven给我们提供了 ⼀套简单的命令来完成项⽬的构建。
Maven的命令有以下:
例如,点击package,就可以完成项目的打包操作。
打包就是把所有的class文件全部放在一起,打成jar包或者war包。
jar包和war包都是⼀种压缩⽂件。
jar包就是把开发⼈员已经写好的⼀些代码进⾏打包.打好的jar包就可以引⼊到其他项⽬中,也可以直 接使⽤这些jar包中的类和属性.另外也可以打成可执⾏jar包,这样的包就可以通过java -jar命令来执行。
war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西,通常⽤于⽹站。
1.4.2 依赖管理
Maven是一个项目管理工具,通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。获取的jar包其实就是依赖。
pom.xml就是maven的配置文件,用以描述项目的各种信息。
依赖:指当前项目运行所需要的jar包。
使用JDBC需要手动下载mysql-connector-java的包,并且添加到项目中。
但是,如果使用maven,我们只需要在pom.xml中引入mysql-connector-java的依赖就可以了。
步骤1):在pom.xml文件 <dependencies> 标签内,添加依赖坐标
需要的依赖jar包在中央仓库都可以找到:Maven Repository: Central (mvnrepository.com)
步骤2):点击刷新按钮,引入新加入的依赖jar包
后续有添加新的jar包,或者修改jar包版本,都需要通过该⽅式在项⽬中添加依赖.
步骤3):刷新完之后,就可以在项目中看到新加入的jar包
依赖传递
早期我们没有使用maven时,想向项目中添加依赖的jar包,需要把所有的jar包都复制到项目工程下。
比如A依赖B,B依赖C,那么项目A引入B的同时,也需要引入C,如果手动管理这个依赖过程就麻烦。我们需要知道每个库都依赖哪些库,以及这些依赖之间的版本是如何关联的。
但,使用maven的话,就可以避免管理所依赖的关系。只需要在pom文件中,定义直接依赖就可以。由于maven的依赖具有传递性,所以会自动把所依赖的其他jar包也一起导入。
1.4.3 Maven Help 插件
当项⽬⽐较复杂时,我们就会有Jar包冲突的问题,这时候就需要去解决依赖冲突.解决冲突之前,需要先 找到冲突,我们可以使⽤Maven Help插件来观察包和包之间的依赖关系.
插件就是对程序的⼀些特定场景,做出⼀些特定的功能的扩展。
安装插件:File ->Settings ->Plugins ->搜索'Maven Help' -> 找到对应插件, 点击Install 安装即可,安装后需要重启下idea,才能⽣效。
安装之后,打开pom⽂件,可以看到Jar包之间的依赖关系;也可以右键手动删除一些依赖。
1.5 Maven仓库
我们通过几行代码就把依赖的jar包放在了项目里,具体是如何实现的?
<dependencies>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
</dependencies>
上述代码,我们称之为"坐标",也就是唯一的。
在Maven中,根据groupId、artifactId、version的配置,来唯⼀识别⼀个 jar 包,缺⼀不可. 当我们在pom⽂件中配置完依赖之后,点击刷新,Maven会根据坐标的配置,去仓库⾥寻找Jar包,并把他 下载下来,添加到项⽬中。
这个Jar包下载的地⽅就称为仓库。仓库:⽤于存储资源,管理各种jar包。
Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar包,插件等)。
Maven仓库分为两大类:本地仓库和远程仓库.其中远程仓库又分为中央仓库,私服和其他公共库。
1.5.1 本地仓库
本地仓库:自己计算机上的一个目录(用来存储jar包)。
本地仓库地址可以通过Maven配置查看:
查看该仓库⽬录,可以看到该⽬录下有很多的jar(最开始是空的,随着Maven的使⽤,该仓库下⽂件会越来越多)。
当项目中引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包。如果有,则在项目中直接引用;如果没有,则去中央仓库中下载对应的jar包到本地仓库。
1.5.2 中央仓库
中央仓库:Maven软件中内置一个远程仓库地址,就是中央仓库,服务于整个互联网,由maven团队维护,全球唯一。
查找jar的坐标
1)访问 https://mvnrepository.com/
2)进行查找,比如mysql
3)选择要添加的jar包版本
4)查看jar包对应坐标
jar包版本的选择:
1.5.3 私有服务器(私服)
私服:一般由公司团队搭建的私有仓库。
私服属于某个公司,或者某个部门,往往需要一定权限。有了私服,Maven依赖下载的顺序又发生了变化。
当Maven需要下载资源的时候
先从本地仓库获取,本地仓库存在,则直接返回
如果本地仓库没有,就从私服请求,私服存在该资源,就直接返回
如果私服上不存在该资源,则从中央仓库下载,中央仓库不存在,就报错了...
如果中央仓库中存在,就先缓存在私服上之后,再缓存到本地仓库⾥,再为Maven的下载请求提供服务
私服是很多⼈在使⽤的,所以只需要第⼀个使⽤者下载⼀次就可以了。
1.6 Maven设置国内源
因为中央仓库在国外,所以下载起来会比较慢,我们可以选择借助国内一些公开的远程仓库来下载资源。
1.6.1 配置当前项目settings
- file >> settings 查看配置文件的地址
2)配置国内源
打开settings.xml文件,在mirrors节点上,添加内容(没有settings文件可以自己在网上查找并保存):
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿⾥云公共仓库</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
1.6.2 设置新项目的setting(idea专业版不需要)
上述配置的内容,只对当前项目生效,为了让后续新建的项目也生效,需要重新设置以下新项目的settings。
当前项⽬和新项⽬共⽤⼀个setttings⽂件即可,所以新项⽬的设置,只需要确认⼀下settings⽂件的路径即可。
2.SpringBoot介绍
2.1 认识Spring
学习SpringBoot之前先认识Spring~
Spring两个含义:
- 一个是Spring家族,全家桶;
- 另一个指Spring Core,也就是Spring Framework。
上述是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 框架⽽诞⽣的。
2.2 Spring Boot 项目搭建
1)File >> New >> Project
(不同版本的idea界面显示可能会有不同)
2)点击Next
3)点击Create就完成 Spring Boot 的项目创建了。
注意事项
第⼀次打开Spring Boot 项⽬需要加载很久,因为当前Spring Boot 框架并没有在⾃⼰的本地仓库。为了加速Spring Boot 项⽬的下载,在打开项⽬之前,请先确认⾃⼰的 Maven 已经配置为国内源。
2.3 项目代码和目录介绍
1)项目代码
观察pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
pom.xml⽂件⾥的具体信息,不需要过度关注,我们主要看标签⾥⾯的内容:
pom⽂件中,引⼊了两个依赖:
• spring-boot-starter-web:包含了web应⽤开发所需要的常⻅依赖
• spring-boot-starter-test:包含了单元测试所需要的常⻅依赖
父工程
这个依赖没有指定具体的版本号,但我们的jar包也正常引入到项目中,并且查看也有版本号。
同时,本地仓库的jar包也下载下来了~
为什么没有指定 <version>,程序也可以正常运行呢?
因为每一个SpringBoot工程,都有一个父工程,依赖的版本号,在⽗⼯程中统⼀管理。⽗⼯程指定版本号后,就会⾃动引⼊和所指定版本对应的依赖,创建的SpringBoot项⽬,会继承 SpringBoot⽗⼯程。
2)目录介绍
Spring Boot项目主要有两个主要的目录:
- src/main/java:Java源代码
- src/main/resources:为静态资源或配置文件 -->> 1./static:静态资源文件夹,有js,css,html等静态文件,不需要服务器数据进行绑定的页面;2. /templates:板块资源文件夹,主要存放动态模板文件,比如JSP,Freemarker,Thymeleaf等需要服务器动态渲染数据的文件
- src/main/test:测试代码源代码
- target:编译后的文件路径
- pom.xml:maven配置文件
2.4 启动项目
点击启动类的main方法就可以运行SpringBoot项目。
2.5 输出hello world
⽤ Spring Boot 来实现和浏览器及用户的交互。
在创建的项目包路径下创建UserController的java文件,实现代码如下:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@RequestMapping("/sayHi")
public String say() {
return "hello Spring Boot ~";
}
}
重新启动项目,访问 http://127.0.0.1:8080/sayHi 最终的效果如下:
以上 ,是对 Spring Boot 的一个简单认识~
😊