【JavaWeb maven基础知识总结】
一.Maven概述
- 是一款用于管理和构建java项目的工具,是apache旗下的一个开源项目
- 在需要使用到某些jar包的时候,只需要在pom.xml文件中导入jar包的依赖
- Maven下载链接: http://maven.apache.org/
1.仓库
用于存储资源,管理各种jar包
- 本地仓库:自己计算机上的一个目录
- 中央仓库: 由maven团队维护的全球唯一的
- 仓库地址: https://mvnrepository.com/artifact/org.apache.maven/maven-core/3.9.4
- 远程仓库(私服): 一般由公司团队搭建的私有仓库
2.Maven的安装
- 安装步骤
① 根据 Maven下载链接: http://maven.apache.org/下载Maven并解压
② 配置本地仓库,修改conf/settings.xml 中的<localRepository>为一个指定目录,这个目录是解压maven后需要自己在maven的bin的同级目录创建一个本地仓库的文件夹(Repository),然后把这个文件夹的目录配置到 localRepository中
③ 配置阿里云私服,修改 conf/settings.xml中的<mirrors>标签,在里面添加一个子标签<mirror>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
④ 配置环境变量: MAVEN_HOME 为maven的解压目录(bin的上级目录),并将bin目录加入PATH环境变量中(%MAVEN_HOME\bin%)
⑤ 测试环境变量是否配置成功,在cmd窗口中输入mvn -v
注意: 配置settings.xml中的本地仓库、私服时,一定要仔细,注意配置信息的位置和标签
二.IDEA集成Maven
1.配置maven环境
- 1.file —> close project
- 2.配置maven环境,本地仓库目录,依赖的JDK版本
2.创建Maven项目
点击 "create"即可
3.Maven坐标
- Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目或引入项目中需要的依赖
- Maven坐标的重要组成
① groupId: 定义当前Maven项目隶属的组织或公司名称的反写
② artifacted: 定义当前Maven项目名称(通常就是模块名)
③ version: 定义当前项目的版本号
SNAPSHOT: 功能不稳定,快照版本
RELEASE 功能稳定,当前更新停止,可以用于发行版本
4.导入maven项目
- 建议将要导入的maven项目复制到你的项目目录下
- 导入的时候一定要注意是导入当前maven项目的pom文件
三.依赖管理
1.依赖配置
依赖: 指当前项目运行所需要的jar包,一个项目中可以引入多个依赖
- 在 pom.xml 中编写 标签
- 在 标签中 使用 引入坐标
- 定义坐标的 groupId,artifactId,version
- 点击刷新按钮,引入最新加入的坐标
2.排除依赖
排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本。
注意:
- 一旦依赖配置变更了,记得重新加载
- 引入的依赖本地仓库不存在,记得联网
3.生命周期
Maven中有3套相互独立的生命周期:
- clean:清理工作。
- default:核心工作,如:编译、测试、打包、安装、部署等。
- site:生成报告、发布站点等。
maven声明周期是构建项目的过程
- clean 移出上一次构建生成的文件
- compile: 编译项目源代码
- test: 使用合适的单元测试框架运行测试
- package: 将编译后的文件打包,如jar,war包等
- install 安装项目到本地仓库
4.依赖范围
可以通过<scope>…</scope> 设置其作用范围。
compile: 默认的会参与编译/测试/打包
test: 只在测试范围内使用
四.单元测试
1.测试概述
- 测试: 是一种用来促进鉴定软件的正确性,完整版,安全性和质量的过程
- 阶段划分: 单元测试,集成测试,系统测试,验收测试
2. 测试方法
- 白盒测试: 单元测试,集成测试
- 黑盒测试: 验收测试
- 灰盒测试: 系统测试
3.单元测试
- 单元测试:就是针对最小的功能单元(方法),编写测试代码对其正确性进行测试。
- JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)
- 测试代码与源代码未分开,难维护
- 一个方法测试失败,影响后面方法
- 无法自动化测试,得到测试报告
引入junit依赖
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.1</version>
</dependency>
测试用例
4.断言测试
- JUnit提供了一些辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言
注意上述方法形参中的最后一个参数 msg,表示错误提示信息,可以不指定(有对应的重载方法)
package com.dream;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class EmpServiceTest3 {
private EmpService empService;
@BeforeEach
public void setUp(){
this.empService = new EmpService();
}
@ParameterizedTest
@ValueSource(strings = {"110101198902111111","362422198902111112","610110201909091109"})
@DisplayName("测试是否为北京人")
public void testIsBeijing(String idCard){
// 断言: 测试是否为北京人
Assertions.assertEquals(true,empService.isBeijing(idCard));
// 断言: 测试计算年龄
Assertions.assertEquals(23,empService.getAge(idCard));
// 断言: 测试计算性别
Assertions.assertEquals("女",empService.getGender(idCard));
// 断言: 测试计算出生月份
Assertions.assertEquals("02",empService.getMonth(idCard));
// 断言: 测试计算出生年份
Assertions.assertEquals("1992",empService.getYear(idCard));
}
@ParameterizedTest
@ValueSource(strings = {"110101198902111111","362422198902111112","610110201909091109"})
@DisplayName("测试计算年龄")
public void testGetAge(String idCard){
// 断言: 测试是否为北京人
Assertions.assertNotEquals(23,empService.getAge(idCard));
// 断言: 测试计算年龄
Assertions.assertNotEquals(23,empService.getAge(idCard));
// 断言: 测试计算性别
Assertions.assertNotEquals("女",empService.getGender(idCard));
// 断言: 测试计算出生月份
Assertions.assertNotEquals("02",empService.getMonth(idCard));
// 断言: 测试计算出生年份
Assertions.assertNotEquals("1992",empService.getYear(idCard));
}
@ParameterizedTest
@ValueSource(strings = {"","362422198902111112",""})
@DisplayName("测试计算性别")
public void testGetGender(String idCard){
// 断言: 测试计算性别
Assertions.assertNull(null,empService.getGender(idCard));
// 断言: 测试计算出生月份
Assertions.assertNotEquals(null,empService.getMonth(idCard));
// 断言: 测试计算出生年份
Assertions.assertNotEquals(null,empService.getYear(idCard));
}
}
5.Junit常见注解
package com.dream;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
public class ApplicationTest {
/**
* 正常计算年龄
*/
@Test
public void testIdCard() {
UserService userService = new UserService();
System.out.println(userService.getAge("110101198001011234"));
}
/**
* 参数非法异常
*/
@Test
public void testIdCard2() {
UserService userService = new UserService();
System.out.println(userService.getGender(null));
}
/**
* 测试断言
*/
@Test
public void testAssersion() {
UserService userService = new UserService();
String gender = userService.getGender("110101199001011234");
System.out.println(gender);
Assertions.assertEquals("女", gender, "性别计算功能有误");
// 测试抛出异常
Assertions.assertThrows(IllegalArgumentException.class, () -> {
String gender1 = userService.getGender("null");
});
}
//常用注解, 测试方法
//每执行一次测试方法之前都会自动执行的方法
@BeforeEach
public void beforeEach() {
System.out.println("beforeEach...........");
}
//每执行一次测试方法之后都会自动执行的方法
@AfterEach
public void afterEach() {
System.out.println("afterEach...........");
}
// 测试方法前只执行一次的测试方法
@BeforeAll
public static void beforeAll() {
System.out.println("beforeAll...........");
}
//测试方法后只执行一次的测试方法
@AfterAll
public static void afterAll() {
System.out.println("afterAll...........");
}
/**
* 参数化测试
* 可以使用给定的参数自动执行多次
*
* @param idCard
*/
@ParameterizedTest
@ValueSource(strings = {"110101199001011234", "110101199001011235", "110101199001011236"})
public void testAge2(String idCard) {
UserService userService = new UserService();
Integer age = userService.getAge(idCard);
Assertions.assertTrue(age >= 18);
System.out.println(age);
}
}
}
五.IDEA中有关JDK的设置
1.设置Project的jdk版本
2.设置Module的jdk版本
3.设置maven运行时使用的jdk版本
4.设置模块真正编译时使用的jdk版本!!!
5.运行maven项目时, 会报错: 不支持的版本 5,7,21…
优先级最高的终极大招!!!
<!--指定maven编译插件!!!!-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!--指点源代码检查时需要的jdk版本-->
<source>17</source>
<!--指定编译和打包时使用的jdk版本-->
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
六.总结
本篇文章主要总结了maven的一些基本概念,maven的下载,maven的作用,maven坐标的引入,Maven的依赖管理,在maven项目中完成一些基本的单元测试,断言测试最后总结了一些IDEA集成maven配置JDK的一些基本配置