【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven
Maven
Maven核心
Maven概述
-
定义:
Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目,基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的构建。官网:http://maven.apache.org/
-
作用:
- 依赖管理:方便快捷地管理依赖的资源(jar包)
- 项目构建:标准化的跨平台(Linux、Windows、MacOS)的自动化项目构建方式
- 统一项目结构:提供标准、统一的项目结构
-
结构:
- POM
- dependencies
- 构建生命周期/阶段
- 仓库:用于存储和管理各种jar包
- 本地仓库(1):自己计算机上的一个目录
- 远程仓库(私服,2):一般由公司团队搭建的私有仓库。
- 中央仓库(3):由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
IDEA集成Maven
-
创建Maven项目
- 配置Maven环境(全局)
-
Maven坐标
- Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置。
- 使用坐标来定义项目或引入项目中需要的依赖
- 主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:定义当前项目版本号(约定规范)
- SNAPSHOT:功能不稳定、尚处于开发中的版本,即快照版本
- RELEASE:功能趋于稳定、当前更新停止,可以用于发行的版本
-
导入Maven项目
建议将要导入的maven项目复制到你的项目目录下
建议选择maven项目的pom.xml文件进行导入(后续的继承与集合,如果一个模块关联了其他模块,选择pom可以一次性将其他相关模块一起导入)
- File -> Project Structure -> Modules -> Import Module -> 选择maven项目的pom.xml
- Maven面板 -> + (Add Maven Projects) -> 选择maven项目的pom.xml
依赖管理
注意:一旦依赖配置变更了,记得重新加载
注意:引入的依赖本地仓库不存在,记得联网
-
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
-
配置:
- 在pom.xml中编写
<dependencies>
标签 - 在
<dependencies>
标签中使用<dependency>
引入坐标 - 定义坐标的
groupId, artifactId, version
- 点击刷新按钮,引入最新加入的坐标
- 如果不知道依赖的坐标信息,可以到官网中搜索
- 依赖传递:如果A依赖了B,B依赖了C,C依赖了D,如果引入A,会引入ABCD
- 在pom.xml中编写
-
排除依赖
-
排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本
<exclusion></exclusion>
-
生命周期
Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。
Maven中有相互独立的3套生命周期:
下文只列出了重要的5个生命周期,实际上还有很多
在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行
- clean:清理工作
- clean:移除上一次构建生成的文件
- default:核心工作,如编译、测试、打包、安装、部署等
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war等
- install:安装项目到本地仓库
- site:生成报告、发布站点等
执行生命周期的两种方式:
- 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
- 在命令行中,通过命令执行。
单元测试
测试
一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
阶段划分:
- 单元测试(白盒测试)
- 介绍:对软件的基本组成单位进行测试,最小测试单位。
- 目的:检验软件基本组成单位的正确性。
- 测试人员:开发人员
- 集成测试(灰盒测试)
- 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。
- 目的:检查单元之间的协作是否正确。
- 测试人员:开发人员
- 系统测试(黑盒测试)
- 介绍:对已经集成好的软件系统进行彻底的测试。
- 目的:验证软件系统的正确性、性能是否满足指定的要求。
- 测试人员:测试工程师
- 验收测试(黑盒测试)
- 介绍:交付测试,时针对用户需求、业务流程进行的正式的测试。
- 目的:验证软件系统是否满足验收标准。
- 测试人员:客户/需求方
测试方法:
- 白盒测试
- 清楚软件内部结构、代码逻辑
- 用于验证代码、逻辑正确性
- 黑盒测试
- 不清楚软件内部结构、代码逻辑
- 用于验证软件的功能、兼容性等方面
- 灰盒测试
- 结合了白盒、黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)
单元测试
快速入门
针对最小的功能单元(方法),编写测试代码对其正确性进行测试。
JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)
main方法测试
- 测试代码与源代码未分开,难以维护
- 一个方法测试失败,影响后面方法
- 无法自动化测试,得到测试报告
JUnit单元测试(推荐)
-
测试代码与源代码分开,便于维护
-
可根据需要进行自动化测试
-
可自动分析测试结果,产出测试报告(通过:绿色,失败:红色)
-
一个测试方法执行失败,不会影响其它测试方法
-
步骤
- 在pom.xml中,引入JUnit的依赖
- 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
-
命名规范
类(规范):
XxxxTest
方法(规定):
@Test <br> public void testXxxx
断言
JUnit提供的辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言。
- 单元测试方法运行不报错,不代表业务方法没问题
- 通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性
- Assertions.assertXxxx(…)
断言方法 | 描述 |
---|---|
Assertions.assertEquals(Object exp, Object act, String msg) | 检查两个值是否相等,不相等就报错 |
Assertions.assertNotEquals(Object unexp, Object act, String msg) | 检查两个值是否不相等,相等就报错 |
Assertions.assertNull(Object act, String msg) | 检查对象是否为null,不为null就报错 |
Assertions.assertNotNull(Object act, String msg) | 检查对象是否不为null,为null就报错 |
Assertions.assertTrue(boolean condition, String msg) | 检查对象是否为true,不为true就报错 |
Assertions.assertFalse(boolean condition, String msg) | 检查对象是否为false,不为false就报错 |
Assertions.assertThrows(Class expType, Executable exec, String msg) | 检查程序运行抛出的异常,是否符合预期 |
上述方法形参中的最后一个参数msg,表示错误提示信息,可以不指定(有对应的重载方法)
常见注解
JUnit还提供了常见注解,还增强其功能,常见的注解有:
0注解 | 说明 | 备注 |
---|---|---|
@Test | 测试类中的方法用它修饰才能成为测试方法,才能启动执行 | 单元测试 |
@ParameterizedTest | 参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同) | 用了该注解就不需要@Test注释了 |
@ValueSource | 参数化测试的参数来源,赋予测试方法参数 | 与参数化测试注解配合使用 |
@DisplayName | 指定测试类、测试方法显示的名称(默认为类名、方法名) | |
@BeforeEach | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次 | 初始化资源(准备工作) |
@AfterEach | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次 | 释放资源(清理工作) |
@BeforeAll | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次 | 初始化资源(准备工作) |
@AfterAll | 用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次 | 释放资源(清理工作) |
单元测试-企业开发规范
- 原则:编写测试方法是,要尽可能覆盖业务方法中所有可能的情况(尤其是边界值)。
- 使用with Coverage检测覆盖率。
依赖范围
-
依赖的jar包,默认情况下,可以在任何地方使用。可以通过
<scope>xxx</scope>
设置其作用范围。 -
作用范围:
-
主程序范围有效。(main文件夹范围内)
-
测试程序范围有效。(test文件夹范围内)
-
是否参与打包运行。(package指令范围内)
scope值 主程序 测试程序 打包(运行) 范例 compile(默认) Y Y Y log4j test - Y - junit provided Y Y - servlet-api runtime - Y Y jdbc驱动
-
Maven常见问题解决方案
-
Maven面板出现红色下划线,刷新无用
-
产生原因:由于网络原因,依赖没有下载完整导致的,在maven仓库中生成了
xxx.lastUpdated
文件,该文件不删除,不会再重新下载 -
解决方案:通过命令
(del /s *.lastUpdated)
批量递归删除指定目录下的xxx.lastUpdated
文件,删除之后重新加载项目即可重新加载下载依赖之后如果仍然报红,关闭IDEA重载项目
-