当前位置: 首页 > article >正文

【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的一些基本配置


http://www.kler.cn/a/419072.html

相关文章:

  • RabbitMQ rabbitmq.conf配置文件详解
  • 算法训练营day22(二叉树08:二叉搜索树的最近公共祖先,插入,删除)
  • spring boot3.3.5 logback-spring.xml 配置
  • git基本操作说明
  • 网络原理(1)(JavaEE)
  • 【leetcode100】螺旋矩阵
  • 数据资产管理是什么?为什么重要?核心组成部分(分类分级、登记追踪、质量管理、安全合规)、实施方法、未来趋势、战略意义
  • 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程
  • Web API - Clipboard
  • Qt PDF 前置课
  • RTC 实时时钟实验
  • oracle RAC各版本集群总结和常用命令汇总
  • C语言——库函数
  • 最大值(Java Python JS C++ C )
  • 课程答疑微信小程序设计与实现
  • 概率论——假设检验
  • 【北京迅为】iTOP-4412全能版使用手册-第十九章 搭建和测试TFTP服务器
  • C++之2048(2.0版)
  • go并发设计模式runner模式
  • 初级数据结构——二叉搜索树