学JavaWeb第三天——Maven

一、什么是Maven?有什么作用?

以后开发后端项目不用idea了,用maven

Maven作用一:

可以随时更改jar包的版本,只需写这几行代码,就可以引入jar包。

作用二:

  1. 只需双击右侧的 compile、test、package指令,就可以完成编译(java文件编译成.class字节码文件)、测试、打包。点击之后在左侧项目栏处就会有target包。
  2. 并且,这些指令都是跨平台的,Windows、Linux、MacOS都能使用这些构建项目的指令。

作用三:

这样的目录结构可以降低开发维护管理项目的成本。

java文件是存放的项目源代码,而resources存放的是项目的配置文件。

二、Maven初步了解

**pom.xml 中含有:**描述当前项目信息:项目名称、所在包、项目版本、配置文件:用的是JDK哪个版本、编码方式是utf-8等等。

并且,**pom.xml 中还含有:**依赖项。

这些依赖的jar包都存储在哪里呢?------仓库

设置的本地仓库文件夹:

在Maven中,项目都是连接本地仓库这个文件夹来构成依赖的。


安装Maven:

创建Maven项目:

右击web-ai-project01项目,创建 module模块------maven-project01,之后在main的java文件夹下创建com.itheima.Test01 的java运行文件,这样Test01.java文件就可以运行了。

Maven坐标

自己的项目模块有坐标,引入的依赖项也有坐标。坐标是每一个依赖包或者自己项目模块的唯一标志。

导入Maven项目

把其他 Maven模块 导入这个 maven项目 中。

如果要导入的不是模块,而是要将某个java文件导入idea的某个包中,就可以用原始的赋值粘贴的方式完成。只有导入的是模块,才按上述执行。

Maven 依赖管理(根据坐标完成)

通过中央仓库网址:Maven Repository: Search/Browse/Explore 找到对应第三方jar包的坐标。

网页下面的代码直接粘贴复制到项目模块的pom.xml中

将坐标写入对应项目模块的 pom.xml 文件中--------刷新--------点击右侧 M 按钮查看是否下载依赖

Maven还具有依赖传递,当引入的依赖A 还依赖依赖B,则会把依赖B也引入进来。

Maven排除依赖

当依赖A 的某些依赖B,不需要存在于项目模块中时,就可以采用排除依赖exclusion:

micrometer-observation原本还显示在右边的Dependencies目录中,刷新后就没了。

Maven生命周期

clean:移除上一次项目构建产生的字节码class文件、jar包,其实就是删除对应模块的target目录

点击install,clean不会执行,因为不属于同一套生命周期,其余的compile、test等可以运行。

如何执行生命周期某个阶段?

点击install后,会把打包后的jar包放在本地仓库中,找的时候在仓库中按照坐标groupID......来找

第二种方式:用cmd。命令: mvn clean

各个生命周期clean、test、compile都是通过底层的插件来完成的。

三、单元测试

3.1 什么是测试

3.2 单元测试(对方法的测试)

不用main方法,要采用JUnit框架。

单元测试案例

UserService是一个类,类中有很多方法,如getage和getgender等,

一个单元测试类UserServiceTest可以测试UserService类的所有方法,测试方法自己写,一个测试方法 针对 JavaBean类的某个方法。

代码:

1)先写JUnit的依赖项

2)再写测试类和测试方法,测试方法必须public void开头

3)点击运行

测试类左边的箭头点击后--------所有的测试方法都运行--------所有方法都被测试

某个测试方法左边的箭头点击后-----------只这个测试方法运行----------只测试该方法

总结

3.3 断言

代码示例:

总结

3.4 注解

代码示例:

输出结果:

  1. displayName注解要写在 测试类 或者 测试方法 的上面,
  2. 参数化测试是要在上面写明valuesource,在实际执行的时候,是会把strings中的元素一个一个带入到测试方法的形参中运行的。

总结:

3.5 企业级开发规范------单元测试

就是:要测试所有的可能情况,特别是边界值,比如null、" "、少于 or 大于 规定长度18。

代码示例:

点击测试类左边运行按钮的第三个:使用覆盖率运行。

输出结果:右边的覆盖按钮还有一个覆盖率。

覆盖率:

测试了一个类:UserService。测试了该类的一个方法method:getGender。该类的代码只测试了37%。分支是测试了60%

之后把getAge方法的测试也加了上去:

之后点击 "使用覆盖率运行"

全部都覆盖了。

修改覆盖率的测试对象方法:

要尽可能的覆盖业务方法(getAge、getGender)中所有可能的情况,特别是边界值。

单元测试其实和普通的方法、普通的类没有区别。唯一的区别就是多了个注解 :@Test,(3.4 注解部分)。当一个方法有了@Test这样的注解之后,控制台就可以判断对错。如图:

3.6 依赖范围

就是让main只能写主程序,test只能写测试程序。

这些所有测试方法,能够测试的原因就是因为JUnit这个依赖jar包,所以我们就可以限制规定这个jar包的使用范围。默认情况下,依赖的jar包是任何地方都能用,所以main主程序就能写单元测试代码。

表格中,打包(运行)指的是:在package双击后,不会把该jar包打包。

代码示例:

这样在main主程序中就写不了测试程序了。

双击test测试生命周期,该模块的所有代码都会测试,但测试类、测试方法的名字一定要写规范。

如果双击package打包生命周期,不想让执行测试test阶段(因为前面已经test过了),就点击切换"跳过测试"模式。

3.7 Maven中常见的问题

相关推荐
wadesir2 小时前
Java消息队列入门指南(RabbitMQ与Spring Boot实战教程)
java·rabbitmq·java-rabbitmq
一只懒鱼a2 小时前
SpringBoot整合canal实现数据一致性
java·运维·spring boot
Hello.Reader2 小时前
Flink SQL 新特性Materialized Table 一文讲透(数据新鲜度驱动的自动刷新管道)
java·sql·flink
cike_y2 小时前
Mybatis增删改查&CURD
java·开发语言·tomcat·mybatis·安全开发
我认不到你2 小时前
动态线程池+kafka自定义拒绝策略,做到任务不丢失
java·spring boot·spring cloud·kafka
WizLC2 小时前
【后端】关于Elasticsearch的入门,下载安装+使用
java·大数据·后端·elasticsearch·搜索引擎·全文检索
青云交2 小时前
Java 大视界 -- 438 台物联网设备时序数据难题破解:Java+Redis+HBase+Kafka 实战全解析(查询延迟 18ms)(438)
java·智能制造·redis 缓存·hbase 存储·时序数据处理·kafka 消息队列·ai 异常检测
Slow菜鸟2 小时前
Java基础 | JSON 处理手册
java·开发语言·json