概念:Maven是Apache软件基金会组织维护的一款专门为Java项目提供项目构建和依赖管理的工具
1.1作用:
构建:是一个将代码从开发阶段到生产阶段的一个过程:清理,编译,测试,打包,安装,部署等
- 清理:清除上一次的构建结果
- 编译:将.java文件编译成.class文件
- 测试:运行编写单元测试程序
- 报告:针对刚才的测试结果生成全面的信息
- 打包
- Java工程:jar包
- Web工程:war包
- 安装:将当前项目打包之后安装到本地仓库中
- 发布:将项目发布到服务器上进行运行
- Jar包下载:使用Maven之后,Jar包的下载统一都是从Maven远程仓库中进行下载,Maven会管理所有已经上传的Jar包依赖
- Jar包依赖:Jar包本身是一个项目,项目也会依赖于其他Jar包,使用Maven只需要导入最核心的Jar包,其他依赖包会自动加载
- jar包冲突
- Jar包与依赖包之间版本已经搭配好,最大可能的减少了依赖版本冲突问题
- Jar包与Jar包之间依赖冲突了,那么可以通过对Jar包进行调整,从而解决依赖冲突问题
- 约定大于配置,配置大于编码
1.2Maven工作流程
注意:Maven连接远程仓库是需要联网的,如果没有网络那么会构建失败,构建失败后会生成一个后缀lastUpdated的文件
1.首先会向Maven的本地仓库请求资源
2.如果有就直接引用,如果没有就会到远程仓库下载到本地仓库
1.官网下载压缩包
2.必须解压到没有空格、中文目录、特殊字符的目录,不建议放在C盘
3.配置环境变量
- 系统变量中点新建系统变量 变量名:MAVEN_HOME 变量值:解压后的文件夹的路径
- 系统变量中找到path,双击后,新建,输入%MAVEN_HOME%bin
4.mvn-v 测试是否成功安装
3.1分为两大类:
- 本地仓库
计算机中的一个文件夹,位置需要我们通过conf中的settings.xml进行指定(在localRepository下写一对双标签,其中写路径),不写默认的本地仓库在C:/用户/当前用户/.m2/repository
- 远程仓库
- 中央仓库(Maven的默认远程仓库,在国外,下载会比较慢)
- 私服仓库(类似于中央仓库,用于存放Jar包)
- 镜像仓库(国内免费搭建了中央仓库的镜像仓库,如阿里云镜像仓库)
- 公司私服仓库(公司内部封装的一些自己的公共Jar包供所有团队使用)
3.2jar包查找流程
1.当工程需要某个依赖的jar包时,首先会去当前电脑的本地仓库中根据gav坐标查找jar包
- 如果找到了,就直接引用本地仓库的jar包或依赖包
- 如果没有找到就会去连网去远程仓库下载
2.默认远程仓库是Mavan的中央仓库,下载速度慢,有些jar包可能下载不下来。所以一般会配置一个镜像仓库
3.从远程仓库下载的jar包会下载到本地仓库缓存,然后将本地仓库jar包引用到项目中使用(下载一次,永久使用)
1.创建本地仓库文件夹
2.修改settings.xml配置文件中的本地仓库地址(localRepository下写一对双标签,其中写路径)
3.配置阿里云镜像
<mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
4.更改JDK版本(默认Java工程是使用的JDK1.5)
<profile> <!-- 告诉maven我们用jdk17 --> <id>jdk-17</id> <!-- 开启JDK的使用 --> <activation> <activeByDefault>true</activeByDefault> <jdk>17</jdk> </activation> <properties> <!-- 配置编译器信息 --> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion> </properties> </profile>
组成:
- groupId:当前Maven项目隶属于组织名称,通常都是公司域名反写,例如:cn.itsource
- artifactId:项目或者是项目中的一个模块的名称
- version:当前Maven项目版本号,根据需求进行设定
- SNAPSHOT:快照版本,正在迭代过程中,不稳定的版本
- RELEASE:释放,表示正式版本,稳定版本
**mvn compile: ** 编译 - 将java源文件.java 编译成 字节码文件.class
mvn clean: 清理 - 将编译好的字节码文件删除掉
**mvn clean compile:**清理+编译
**mvn test: ** 测试 - 运行测试代码,测试代码编译在target的test-classes中
注意:src/test/java中的所有测试类的所有方法都会自动运行,但是测试类的类名有要求:TestXxx 或 XxxTest
mvn package: 打包【.class字节码文件】
mvn source:jar: 打源码包【.java文件】
mvn install: 安装 - 将项目打包然后将jar包安装到本地仓库中
**mvn package -Dmaven.test.skip=true:**打包的时候跳过测试类
第一步:点击Open
第二步:找到要导入的Maven工程
第三步:会提示让选择是否在当前窗口打开,还是新开一个IDEA创建打开导入的工程
第四步:测试导入的Maven项目
8.1项目的创建
第一步:打开IDEA点击创建工程
第二步:选择Maven工程,输入相关信息,点击Create进行创建
第三步:Maven工程创建成功
8.2Maven配置
第一步:点击右侧Maven按钮,Maven Settings
第二步:配置Maven
第三步:配置创建新工程时的Maven配置,这样以后创建的Maven工程就默认使用此Maven配置了
8.3测试Maven项目
第一步:引入Junit依赖,在IDEA中修改了pom.xml一定要记得刷新Maven才会生效
第二步:在域名包下创建一个类
第三步:在测试包下创建测试类
8.4. IDEA执行Maven命令
9.1. 依赖传递
概念:Maven中依赖是具有传递性的)
查看依赖关系
好处:Maven具有依赖的传递性对我们来说是非常大的一个好处,因为这样就避免我们需要去自己引入间接依赖。
9.2. 依赖排除
场景:有时候我们在引入多个依赖时,间接依赖的版本不一致会导致依赖冲突,那么此时我们就需要阻断依赖。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
exclusion>
exclusions>
dependency>
9.3. 依赖范围
概念:在Maven中依赖是具有作用范围的,默认情况下依赖的Jar包在任何地方都可以使用,我们可以通过…进行依赖作用范围的指定:
- 主程序范围有效:main文件夹范围内
- 测试程序范围有效:test文件夹范围内
- 是否参与打包运行:package指令范围内
scope的取值范围
scope值 | 主程序 | 测试程序 | 打包/运行 |
---|---|---|---|
compile–默认 | Y | Y | Y |
test | N | Y | N |
provided | Y | Y | N |
runtime | - | Y | Y |
9.4. 清理Maven仓库
注意:如果依赖下载失败,Maven识别到以lastUpdated结尾的文件后就不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件,然后Maven才会再次自动下载这些Jar包,以后实际开发中如果项目引入了某Jar包刷新后依赖依然报错,那么就需要检查一下此Jar包是否下载成功
解决方案:
第一步:在桌面创建一个del_lastUpdated.bat文件,创建文本改后缀即可 (文件名可以改,后缀必须是.bat)
第二步:右键编辑bat文件,拷贝以下命令并修改本地仓库文件夹绝对地址
set REPOSITORY_PATH=本地仓库文件夹绝对地址 rem 正在搜索... del /s /q %REPOSITORY_PATH%\*.lastUpdated rem 搜索完毕 pause
第三步:双击执行脚本,即可清除本地仓库下所有lastUpdated文件
概念:本质上Maven的继承就是pom.xml配置的继承
- A工程继承了B工程,那么A工程就继承了B工程的pom.xml所有配置
- Maven继承的层级是没有限制的,大型互联网项目中层级会非常多,我们只需要按照规则去梳理层级即可
1.1. 为什么需要继承
原因一:真实开发中,依赖动则几十上百个依赖,那么这些依赖的版本管理是非常复杂的,为了方便版本管理,那么可以在父工程中统一管理版本信息。子工程直接使用对应版本即可,SpringBoot框架就是使用了Maven继承手段进行开发简化
原因二:真实开发中,一个项目会有很多个子工程,这些子工程都有自己的依赖,那么肯定会有一些重复的依赖,为了减少子工程重复导如依赖坐标信息,可以放在父工程中进行依赖抽取,子工程通过继承的方式进行依赖的引入
1.2. 搭建Maven继承工程
第一步:创建一个Maven工程
第二步
- 删除父工程下的src文件夹,因为父工程只负责管理pom.xml,不负责编写代码,所以不需要src文件
- 修改打包方式为pom,只有打包方式为pom的工程,才能管理其他Maven工程
第三步:创建子工程/Maven模块
1.3. 父子工程解析
1.4. 父工程管理依赖
第一步:父工程管理依赖
- dependencyManagement:此标签用于在父工程中管理依赖,但是不负责引入此依赖到工程中,子工程需要使用什么依赖还是需要在自己的子工程中手动引入,只是不需要引入版本了,版本来自父工程
注意:子工程记住一定要自己引入依赖,否则无法使用其内容
1.5. 配置自定义属性
场景:父工程在真实开发中会管理众多的依赖,那么这些依赖的版本号如果都写在各自的GAV坐标中其实管理起来也颇为复杂,所以我们可以自定义属性进行管理
properties:此标签是配置标签,我们可以在标签内自定义标签来定义属性值,此属性值可以被引用
${}:通过此方式可以引入自定义属性,大括号中的值就是自定义标签的值
2.1. 什么是聚合
概念:在父pom.xml中的modules标签就是聚合标签,他表示了此工程由哪些模块组成,modules下的module也代表了此父工程管理了哪些子模块
优点:
好处一:我们可以直接对父工程执行mvn install,那么整个工程就自动打包好了
好处二:配置聚合之后,各个子模块在父工程中展示一个列表,可以快速让我们知道整个项目的继承结构
JavaEE/J2EE时代
复杂性和繁琐的配置,存在一些限制和挑战
Spring时代
Spring框架引入了依赖注入(DI)和面向切面编程(AOP)等新概念,以减少组件之间的耦合度、提高代码的可维护性和可测试性
Spring通过IoC容器(控制反转容器)来管理对象之间的依赖关系,不用new对象了,并提供了许多其他功能模块,如数据访问、事务管理、安全性等,使开发者能够更专注于业务逻辑的实现
需要配置繁琐
SpringBoot时代
约定大于配置的原则,通过自动配置和默认值设置,减少了繁琐的配置工作
实现步骤
第一步:使用SpringBoot骨架搭建SpringBoot项目
第二步:
- SpringBoot依赖有很多版本,我们学习使用SpringBoot-2.6.13,如果改不了就去pom.xm里面改
- 勾选初始化依赖,SpringBoot项目必须需要Web依赖,所以我们需要勾选Web依赖。其他依赖在以后项目使用中根据实际需要进行勾选
第三步:Springboot创建需要联网下载资源,等待构建完成即可
第四步:使用SpringBoot骨架进行创建会默认生成一些我们暂时使用不到的文件,为了项目简洁我们删除即可
第五步:创建请求处理类
请求处理类:专门用来接收前端发起到后端的请求
存储规范:请求处理类按照规范必须放入到controller包下
第六步:运行SpringBoot项目
- SpringBoot项目中定义了一个启动类,运行这个启动类可以把整个SpringBoot项目运行起来
第七步:浏览器访问
输入localhost:8080/hello 可以到配置文件里面更改默认端口号
1. 运行启动类启动项目,SpringBoot内置Tomcat,启动成功会看到控制台的默认端口号8080
2. 当在地址栏输入http://localhost:8080/hello时,浏览器访问的就是当前项目
3. 然后是用/hello去匹配我们的控制器Controller,即匹配注解@RequestMapping请求映射注解
4. 匹配上之后就会自动执行hello方法中的内容
- Mavanjar包查找流程 先在本地仓库查找,没有就去远程仓库下载后存在本地仓库
- Maven的安装之后需要配置哪些内容,为什么要配置 阿里云镜像 速度快 JDK的版本,默认是jdk1.5的 本地仓库的位置,防止对c盘占用过多
- Maven常见命令分别有哪些,有什么作用 compile编译 test测试 package打成jar包
- Maven继承和聚合的好处 继承,方便管理坐标,避免子工程重复导入相同的依赖 聚合,方便统一打包,管理
- SpringBoot是什么?有什么优势 框架,简化开发,约定大于配置,很多东西不用手动配置了
- SpringBoot入门项目的编写流程步骤有哪些 新建SpringBoot项目 删除不必要的东西 main下建一个controller的包 其中写请求处理类
自动执行hello方法中的内容
> 1. Mavanjar包查找流程 先在本地仓库查找,没有就去远程仓库下载后存在本地仓库
> 2. Maven的安装之后需要配置哪些内容,为什么要配置 阿里云镜像 速度快 JDK的版本,默认是jdk1.5的 本地仓库的位置,防止对c盘占用过多
> 3. Maven常见命令分别有哪些,有什么作用 compile编译 test测试 package打成jar包
> 4. Maven继承和聚合的好处 继承,方便管理坐标,避免子工程重复导入相同的依赖 聚合,方便统一打包,管理
> 5. SpringBoot是什么?有什么优势 框架,简化开发,约定大于配置,很多东西不用手动配置了
> 6. SpringBoot入门项目的编写流程步骤有哪些 新建SpringBoot项目 删除不必要的东西 main下建一个controller的包 其中写请求处理类