Maven
Maven是一款用于管理和构建Java项目的工具。
Maven概述
Maven的作用:
①依赖管理:方便快捷地管理项目依赖的资源(jar包)
在pom.xml中配置好jar包的信息 后,maven会自动下载jar包,并且加入到当前的这个项目中。
②项目构建:标准化的跨平台(Linux、Windows、MacOS)的自动化项目构建方式。
Maven提供项目构建的指令可以快速地对项目进行编译、测试、打包等操作
③统一项目结构:提供标准、统一的项目结构。
(所有的开发工具用maven构建出来的项目结构都是统一的)
Maven的结构:

Maven由**项目对象模型(POM)、依赖管理模型(Dependency)、构建生命周期/阶段(Build lifecycle & phases)**三大部分组成。
POM.XML中定义了一小段描述信息来描述项目的构建 。在XML配置文件当中配置了项目对象模型POM ,也配置了依赖管理模型Dependency。
其中项目对象模型主要来描述当前这个maven项目的信息 ;配置好依赖信息后,maven会去仓库 里面查找这个jar包。Maven的仓库用于存储和管理各种jar包。
本地仓库:自己计算机上的一个目录。
中央仓库:由Maven团队维护的全球唯一的。
远程仓库(私服):一般由公司团队搭建 的私有仓库。


Maven的安装

Welcome to Apache Maven -- Maven
测试: 命令行输入mvn -v查看maven的版本号。
IDEA集成Maven
配置Maven环境(全局):



创建Maven项目:

maven项目的目录结构

运行项目的过程当中,目录结构多了一个target目录,这个target目录下存放的是编译后的字节码文件以及打包后的jar包文件。

运行时自动地对项目进行编译并将编译后的字节码文件放在了target下的classes这个目录下。
Maven坐标:
Maven中的坐标是资源(jar)的唯一标识 ,通过该坐标可以唯一定位资源位置。
使用坐标来定义项目 或引入项目中需要的依赖。
Maven坐标主要组成:
groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
artifactId:定义当前Maven项目名称(通常是模块名称)
version:定义当前项目版本号
SNAPSHOT:功能不稳定 ,处于开发中的版本即快照版本。
RELEASE:功能趋于稳定 ,当前更新停止,可以用于发行的版本。

导入Maven项目:


先将maven项目的文件夹复制出来,粘贴到目标项目的目录下 。此时文件夹已经在项目目录中显式出来了,但是它并不识别这是一个maven项目,这就需要上图的两种方式来导入了。

依赖管理
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
依赖的配置:
①在pom.xml 中编写**<dependencies>**标签
②在**<dependencies>** 标签中使用**<dependency>引入坐标**
③定义坐标的groupId,artifactId,version
④点击刷新按钮,引入最新加入的坐标

依赖的坐标信息,可以在 Maven Repository: Search/Browse/Explore中搜索。
Maven有依赖传递 的特性:如果A依赖了B,B依赖了C,C依赖了D,那么在项目中引入了A以后,BCD是默认会传递下来的。
排除依赖 :指主动断开依赖的资源,被排除的资源无需指定版本。

Maven的生命周期:为了对所有的maven项目构建过程进行抽象和统一。
Maven构建生命周期的各个阶段,底层都是通过一个一个的插件来完成的。
Maven中有3套相互独立的生命周期:
clean :清理工作。
default :核心工作,如:编译、测试、打包、安装、部署等。
site :生成报告、发布站点等。
每套生命周期包含一些阶段,阶段是有顺序的 ,后面的阶段依赖于前面的阶段。
在同一套 生命周期中,当运行后面的阶段时,前面的阶段都会运行。
安装(install):安装项目到本地仓库。
执行指定生命周期的两种方式:
在idea中,右侧的maven工具栏 ,选中对应的生命周期,双击执行。
在命令行中,通过命令执行 。命令的格式:mvn 生命周期的阶段
重点关注生命周期中的五个阶段:clean、compile、test、package、install。
单元测试
测试:是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
测试阶段存在于软件开发的各个阶段 ,根据阶段的不同,测试分为四种:单元测试、集成测试、系统测试、验收测试。
单元测试的目的:检验软件基本组成单位 (通常指方法 )的正确性。测试人员:开发人员 最小测试单位 (白盒测试)
集成测试将已分别通过测试的单元 ,按设计要求组合成系统或子系统 ,再进行测试。目的:检查单元之间的协作是否正确 。 测试人员:开发人员 (灰盒测试)
系统测试对已经集成好的软件系统进行彻底的测试 。目的:验证软件系统的正确性、性能是否满足指定的要求 。 测试人员:专业的测试人员 (黑盒测试)
验收测试也称交付测试 ,是针对用户需求、业务流程 进行的正式的测试。目的:验证软件系统是否满足验收标准 。 测试人员:客户/需求方 (黑盒测试)
测试的方法:白盒测试、黑盒测试及灰盒测试。
白盒测试:清楚软件内部结构、代码逻辑 。用于验证代码、逻辑正确性。
黑盒测试:不清楚软件内部结构、代码逻辑 。用于验证软件的功能、兼容性等方面。
灰盒测试:既关注软件的内部结构 又考虑外部表现 (功能)。

使用Junit对业务方法进行单元测试:
①在pom.xml中,引入Junit的依赖。
②在test/java目录 下,创建测试类 ,并编写对应的测试方法 ,并在方法上声明**@Test注解**。

单元测试方法运行不报错,不代表业务方法没问题。Junit提供了一些辅助方法 ,帮我们确定被测试的方法是否按照预期的效果正常工作 ,这种方式称为断言。

上述方法形参中的最后一个参数msg,表示错误提示信息,可以不指定。
Junit常见注解:


JUnit单元测试的方法,可以通过参数化测试来声明方法形参 。@ParameterizedTest + @ValueSource
单元测试-企业开发规范:编写测试方法时,要尽可能地覆盖业务方法中所有可能的情况 (尤其是边界值)。


借助idea当中的覆盖率 可以判断单元测试有没有覆盖到业务方法所有可能出现的情况。
基于通义灵码自动生成单元测试:

依赖范围
依赖的jar包,默认情况下,可以在任何地方使用 。可以通过**<scope>...</scope>**设置其作用范围。
作用范围:
主程序范围有效。(main文件夹范围内)
测试程序范围有效。(test文件夹范围内)
是否参与打包运行。(package指令范围内)

当运行maven中test生命周期的阶段时,当前项目中所有规范的单元测试都会运行 。规范指类名最后以Test结尾。
Maven常见问题的解决方案:


重新加载依赖,依赖下载之后,maven面板如果还报红,此时可以关闭IDEA,重新打开IDEA加载此项目即可。