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加载此项目即可。