一.什么是Maven
1.含义
Maven是一款用于管理和构建Java项目的工具,基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建
**官网:**https://maven.apache.org/
2.作用
- **依赖管理:**方便快捷的管理项目依赖的资源(jar包)
- **项目构建:**标准化的跨平台(Linux、Windows、MacOs)的自动化项目构建方式
- **统一项目结构:**提供标准、统一的项目结构

查找依赖(jar)的顺序是优先本地仓库,本地仓库没有再去连接远程仓库(私服),如果都没有会去中央仓库下载
3.安装

二.IDEA集成Maven
1.创建Maven项目


**注:**target这个目录下存放的是编译后的字节码文件以及打包后的架包文件
2.坐标
1)什么是坐标
- Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目or 引入项目中需要的依赖
2)Maven坐标组成
**groupId:**定义当前Maven项目隶属组织名称(通常是域名反写,例如:baidu.com)
**artifactID:**定义当前Maven项目名称(通常是模块名称,例如:order-service、goods-service)
**version:**定义当前项目版本号
- SNAPSHOT**:**功能不稳定、尚处于开发中的版本,即快照版本
- RELEASE**:**功能趋于稳定、当前更新停止,可以用于发行的版本
3.导入Maven项目


注意事项:
- 建议将要导入的Maven项目复制到你的项目目录下
- 建议选择Maven项目的pom.xml文件进行导入
三.依赖管理
1.依赖配置
**依赖:**指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
配置:
1.在pom.xml中编写**<dependencies>**标签
2.在**<dependencies>标签中使用<dependency>**引入坐标
3.定义坐标的groupId,artfactId,version
4.点击刷新按钮,引入最新加入的坐标
2.排除依赖 
注意事项:
- 一旦依赖配置变更了,记得重新加载
- 引入的依赖本地仓库不存在,记得联网
3.生命周期

**clean:**清理工作
**default:**核心工作,如:编译,测试,打包,安装,部署等
**site:**生成报告,发布站点等
**注:**在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行


四.单元测试
1.测试含义
**测试:**是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程
**阶段划分:**单元测试、集成测试、系统测试、验收测试

**测试方法:**白盒测试、黑盒测试、灰盒测试


2.快速入门
1)单元测试
**单元测试:**就是针对于最小的功能单元(方法),编写测试代码对其正确性进行测试
**JUnit:**最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)
使用JUnit单元测试的优点:
1.测试代码与源代码分开,便于维护
2.可根据需要进行自动化测试,一个测试方法失败,不会影响其他测试方法
3.可自动分析测试结果,产出测试报告
main方法也可以测试,但是存在弊端:
1.测试代码与源代码未分开,难以维护
2.一个方法测试失败,影响后面方法
3.无法自动化测试,得到测试报告
3.断言

在JUnit单元测试中,为什么要使用断言?
- 单元测试方法运行运行不报错,不代表业务方法没问题。
- 通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性。
- Assertions.assertXxxx(...)
4.Junit常见注解

注:@BeforeAll和@AfterAll这两个注解要修饰的方法必须是static静态方法,否则会报错

5.企业开发规范
**原则:**编写测试方法时,要尽可能的覆盖业务方法中所有可能的情况(尤其是边界值)

在进行测试的同时计算测试覆盖率

**Class:**测试覆盖率
**Method:**业务方法覆盖率
**Line:**代码覆盖率
**Branch:**分支覆盖
同时可以基于AI,测试UserService中的getGender方法
主包使用的是阿里的通义灵码,点击之后AI会根据业务方法自动进行测试代码的编写

6.Maven依赖范围
在Maven项目中,test目录存放单元测试的代码,可以在main目录中编写单元测试,但是不符合规范,所以可以对此作出限制。

注:我们主要关注compile和test

加入<scope>test</scope>后在main编写测试代码会报错,这样就进行了规范限制

我们可以通过生命周期中的test来进行测试,如果进行后续操作不想再进行测试可以点击鼠标点击的无符号,名为跳过测试。
五.Maven常见问题

一般会因为网络不好遇到如上图这种下载,下载不完全,刷新之后还是没有用

六.疑惑点
在java的maven里面打包和jar包和install是什么意思?
-
打包 :Maven中的打包是将项目的源代码和资源文件进行编译、处理后,生成可分发的文件格式的过程。Maven支持多种打包格式,如JAR(Java Archive)、WAR(Web Application Archive)等。打包过程由Maven的生命周期管理,通过执行特定的Maven命令(如
mvn package
)触发。打包会执行一系列的操作,包括编译Java源代码、处理资源文件、运行测试等,最终生成相应格式的文件,方便项目的部署和分发1。 -
JAR包 :JAR是Java Archive的缩写,它是一种基于ZIP格式的文件,用于将多个Java类文件、相关的资源文件(如配置文件、图片等)和元数据(如清单文件)组合成一个单一的文件。JAR包可以包含一个完整的Java应用程序、库或模块,方便在不同的项目中复用。在Maven项目中,JAR包通常是打包的默认输出格式,通过执行
mvn package
命令会在项目的target
目录下生成一个以项目名称和版本号命名的JAR文件。例如,一个名为my - project
、版本号为1.0.0
的项目,打包后会生成my - project - 1.0.0.jar
文件。 -
install :Maven的
install
是一个生命周期阶段,执行mvn install
命令时,Maven会先完成package
阶段的所有任务,即进行项目的打包操作,生成相应的JAR包(或其他格式的包)。然后,将生成的包安装到本地的Maven仓库中。本地Maven仓库是开发者本地的一个目录,用于存储已安装的Maven项目的包。安装到本地仓库后,其他Maven项目可以通过在pom.xml
文件中添加依赖声明来引用这个包,方便在不同项目间共享代码和资源。例如,如果要在另一个项目中使用之前安装的my - project - 1.0.0.jar
,只需在其pom.xml
中添加如下依赖声明:
java
<dependency>
<groupId>com.example</groupId> <!-- 实际的groupId -->
<artifactId>my - project</artifactId>
<version>1.0.0</version>
</dependency>