【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven

Maven

Maven核心

Maven概述

  • 定义:

    Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目,基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的构建。官网:http://maven.apache.org/

  • 作用:

    • 依赖管理:方便快捷地管理依赖的资源(jar包)
    • 项目构建:标准化的跨平台(Linux、Windows、MacOS)的自动化项目构建方式
    • 统一项目结构:提供标准、统一的项目结构
  • 结构:

    • POM
    • dependencies
    • 构建生命周期/阶段
    • 仓库:用于存储和管理各种jar包
      • 本地仓库(1):自己计算机上的一个目录
      • 远程仓库(私服,2):一般由公司团队搭建的私有仓库。
      • 中央仓库(3):由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/

IDEA集成Maven

  • 创建Maven项目

    • 配置Maven环境(全局)
  • Maven坐标

    • Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置。
    • 使用坐标来定义项目或引入项目中需要的依赖
    • 主要组成
      • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
      • artifactId:定义当前Maven项目名称(通常是模块名称)
      • version:定义当前项目版本号(约定规范)
        • SNAPSHOT:功能不稳定、尚处于开发中的版本,即快照版本
        • RELEASE:功能趋于稳定、当前更新停止,可以用于发行的版本
  • 导入Maven项目

    建议将要导入的maven项目复制到你的项目目录下

    建议选择maven项目的pom.xml文件进行导入(后续的继承与集合,如果一个模块关联了其他模块,选择pom可以一次性将其他相关模块一起导入)

    • File -> Project Structure -> Modules -> Import Module -> 选择maven项目的pom.xml
    • Maven面板 -> + (Add Maven Projects) -> 选择maven项目的pom.xml

依赖管理

注意:一旦依赖配置变更了,记得重新加载

注意:引入的依赖本地仓库不存在,记得联网

  • 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。

  • 配置:

    • 在pom.xml中编写<dependencies>标签
    • <dependencies>标签中使用<dependency>引入坐标
    • 定义坐标的groupId, artifactId, version
    • 点击刷新按钮,引入最新加入的坐标
    • 如果不知道依赖的坐标信息,可以到官网中搜索
    • 依赖传递:如果A依赖了B,B依赖了C,C依赖了D,如果引入A,会引入ABCD
  • 排除依赖

    • 排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本

      <exclusion></exclusion>
      

生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。

Maven中有相互独立的3套生命周期:

下文只列出了重要的5个生命周期,实际上还有很多

在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行

  • clean:清理工作
    • clean:移除上一次构建生成的文件
  • default:核心工作,如编译、测试、打包、安装、部署等
    • compile:编译项目源代码
    • test:使用合适的单元测试框架运行测试(junit)
    • package:将编译后的文件打包,如:jar、war等
    • install:安装项目到本地仓库
  • site:生成报告、发布站点等

执行生命周期的两种方式:

  • 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
  • 在命令行中,通过命令执行。

单元测试

测试

一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

阶段划分

  • 单元测试(白盒测试)
    • 介绍:对软件的基本组成单位进行测试,最小测试单位。
    • 目的:检验软件基本组成单位的正确性。
    • 测试人员:开发人员
  • 集成测试(灰盒测试)
    • 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。
    • 目的:检查单元之间的协作是否正确。
    • 测试人员:开发人员
  • 系统测试(黑盒测试)
    • 介绍:对已经集成好的软件系统进行彻底的测试。
    • 目的:验证软件系统的正确性、性能是否满足指定的要求。
    • 测试人员:测试工程师
  • 验收测试(黑盒测试)
    • 介绍:交付测试,时针对用户需求、业务流程进行的正式的测试。
    • 目的:验证软件系统是否满足验收标准。
    • 测试人员:客户/需求方

测试方法

  • 白盒测试
    • 清楚软件内部结构、代码逻辑
    • 用于验证代码、逻辑正确性
  • 黑盒测试
    • 不清楚软件内部结构、代码逻辑
    • 用于验证软件的功能、兼容性等方面
  • 灰盒测试
    • 结合了白盒、黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)
单元测试
快速入门

针对最小的功能单元(方法),编写测试代码对其正确性进行测试

JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)

main方法测试

  • 测试代码与源代码未分开,难以维护
  • 一个方法测试失败,影响后面方法
  • 无法自动化测试,得到测试报告

JUnit单元测试(推荐)

  • 测试代码与源代码分开,便于维护

  • 可根据需要进行自动化测试

  • 可自动分析测试结果,产出测试报告(通过:绿色,失败:红色)

  • 一个测试方法执行失败,不会影响其它测试方法

  • 步骤

    • 在pom.xml中,引入JUnit的依赖
    • 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
  • 命名规范

    类(规范):XxxxTest

    方法(规定): @Test <br> public void testXxxx

断言

JUnit提供的辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言。

  • 单元测试方法运行不报错,不代表业务方法没问题
  • 通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性
  • Assertions.assertXxxx(…)
断言方法描述
Assertions.assertEquals(Object exp, Object act, String msg)检查两个值是否相等,不相等就报错
Assertions.assertNotEquals(Object unexp, Object act, String msg)检查两个值是否不相等,相等就报错
Assertions.assertNull(Object act, String msg)检查对象是否为null,不为null就报错
Assertions.assertNotNull(Object act, String msg)检查对象是否不为null,为null就报错
Assertions.assertTrue(boolean condition, String msg)检查对象是否为true,不为true就报错
Assertions.assertFalse(boolean condition, String msg)检查对象是否为false,不为false就报错
Assertions.assertThrows(Class expType, Executable exec, String msg)检查程序运行抛出的异常,是否符合预期

上述方法形参中的最后一个参数msg,表示错误提示信息,可以不指定(有对应的重载方法)

常见注解

JUnit还提供了常见注解,还增强其功能,常见的注解有:

0注解说明备注
@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行单元测试
@ParameterizedTest参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同)用了该注解就不需要@Test注释了
@ValueSource参数化测试的参数来源,赋予测试方法参数与参数化测试注解配合使用
@DisplayName指定测试类、测试方法显示的名称(默认为类名、方法名)
@BeforeEach用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次初始化资源(准备工作)
@AfterEach用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次释放资源(清理工作)
@BeforeAll用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次初始化资源(准备工作)
@AfterAll用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次释放资源(清理工作)
单元测试-企业开发规范
  • 原则:编写测试方法是,要尽可能覆盖业务方法中所有可能的情况(尤其是边界值)。
  • 使用with Coverage检测覆盖率。

依赖范围

  • 依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>xxx</scope>设置其作用范围。

  • 作用范围:

    • 主程序范围有效。(main文件夹范围内)

    • 测试程序范围有效。(test文件夹范围内)

    • 是否参与打包运行。(package指令范围内)

      scope值主程序测试程序打包(运行)范例
      compile(默认)YYYlog4j
      test-Y-junit
      providedYY-servlet-api
      runtime-YYjdbc驱动

Maven常见问题解决方案

  • Maven面板出现红色下划线,刷新无用

    • 产生原因:由于网络原因,依赖没有下载完整导致的,在maven仓库中生成了xxx.lastUpdated文件,该文件不删除,不会再重新下载

    • 解决方案:通过命令(del /s *.lastUpdated)批量递归删除指定目录下的xxx.lastUpdated文件,删除之后重新加载项目即可

      重新加载下载依赖之后如果仍然报红,关闭IDEA重载项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言易混淆知识点详解

C语言中容易混淆的知识点详解 C语言作为一门基础且强大的编程语言&#xff0c;有许多容易混淆的概念和特性。以下是C语言中一些常见易混淆知识点的详细解析&#xff1a; 1. 指针与数组 相似点&#xff1a; c 复制 下载 int arr[10]; int *ptr arr; 都可以使用[]运算符访…

MCP原理详解及实战案例(动嘴出UI稿、3D建模)

文章目录 MCP 原理介绍架构核心组件协议层传输层连接生命周期MCP与function calling: 互补关系 MCP python SDKMCP的优点 怎么用MCP&#xff1a;天气服务参考应用项目&#xff1a; REF 24年11月份&#xff0c;claude推出了模型上下文协议( MCP),作为一种潜在的解决方案&#xf…

2025年深圳杯数学建模(东三省)B题【颜色转换】原论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025年深圳杯数学建模&#xff08;东三省&#xff09;B题【颜色转换】完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成…

cpp学习笔记1--class

2年前学过cpp&#xff0c;但是一直没有用到&#xff0c;现在要读研了&#xff0c;终于要用到了&#xff0c;重新拿出来看一看&#xff0c;觉得很多东西都能在c和python上看到影子。 #include "iostream" class Person { private:std::string name;int age;public://…

基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计

在目标检测任务中,高质量的训练数据是模型性能提升的关键。本文围绕 YOLOv 系列模型,系统性地研究了目标检测训练数据的构建方法,提出了一套从图像采集、标注、数据集划分到数据增强的一体化流程设计 。通过多源图像采集策略确保样本多样性,结合 LabelImg 工具完成 VOC 格式…

SQL数据库操作大全:从基础到高级查询技巧

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; SQL数据库操作核心语法精要 数据库基础操作 创建/删除数据库&#xff1a;CREATE DATABASE / DROP DATABASE 备份SQL Server&#xff1a;使用sp_addumpdevice和BACKUP DATABASE命令 数据库…

[2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?

MySQL事务机制与日志系统详解 一、MySQL事务机制 1. 事务特性&#xff08;ACID&#xff09; 特性实现机制原子性(Atomicity)undo log回滚,(事务作为一个整体被执行&#xff0c;包含在其中的对数据库的操作要么全部被执行&#xff0c;要么都不执行)。一致性(Consistency)约束…

LLama-v2 权重下载

地址&#xff1a;llama模型 官方github仓库&#xff1a;llama仓库 注意点 网络代理位置&#xff1a;美国下面的国家选择 United States 克隆仓库后 运行bash download.sh输入邮箱收到的URL选择要下载的权重等待下载完成即可 有问题留言&#xff01;&#xff01;&#xff01…

zephyr OS架构下构建Nordic MCU boot

目录 概述 1. 软硬件环境 1.1 软件开发环境 1.2 硬件环境 2 MCU boot 2.1 核心功能 2.2 关键术语 2.3 重要字段介绍 3 VS-Code下创建MCU-BOOT项目 3.1 软件框架结构 3.2 创建测试项目 3.3 编译项目 3.3 固件在Flash中的分布 4 验证 4.1 烧写固件 ​ 4.2 代码…

【Mytais系列】介绍、核心概念

MyBatis 是一款优秀的 持久层框架&#xff0c;它通过简化 JDBC 操作、提供灵活的 SQL 映射能力&#xff0c;成为 Java 开发中处理数据库交互的核心工具之一。以下是 MyBatis 的核心框架和概念解析&#xff1a; 一、MyBatis 框架概述 1. 核心定位 作用&#xff1a;将 Java 对象…

IO模型和多路复用

一、IO模型的基础理解 什么是IO? IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是: IO通常很慢(从CPU和内存的视角看)经常需要等待外部设备响应1. 为什么要谈IO模型? 当一个程序需要…

深入理解 Bash 中的 $‘...‘ 字符串语法糖

在 Bash 脚本编程中&#xff0c;字符串处理是不可或缺的一部分。为了让开发者更高效地处理特殊字符和控制字符&#xff0c;Bash 引入了一种独特的字符串语法糖&#xff1a;$&#xff08;带单引号的 ANSI-C 风格字符串&#xff09;。这种语法来源于 C 语言的 ANSI-C 标准&#x…

用Python打造自己的专属命令行工具

在日常的开发和使用过程中&#xff0c;我们常常会编写一些实用的Python脚本&#xff0c;比如用来批量处理文件、获取系统信息等。然而&#xff0c;每次都要输入python script_name.py来运行脚本&#xff0c;时间一长难免觉得繁琐。要是能像使用系统自带的命令&#xff08;如ls、…

【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎

KWDB介绍 KWDB数据库是由开放原子开源基金会孵化的分布式多模数据库&#xff0c;专为AIoT场景设计&#xff0c;支持时序数据、关系数据和非结构化数据的统一管理。其核心架构采用多模融合引擎&#xff0c;集成列式时序存储、行式关系存储及自适应查询优化器&#xff0c;实现跨模…

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips&#xff1a;平常最表层的是命令行模式&#xff0c;最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…

链表操作练习

要求 现在有一个双向链表&#xff0c;里面要保存歌曲的名字&#xff1b;例如 蔡琴/渡口.mp3 我们把它定义在一个link.h文件中。 #ifndef LINK_H #define LINK_H #include <stdlib.h> #include <stdio.h> #include <string.h>typedef struct Node {//保存歌…

MATLAB制作散点图:从基础到进阶的三种类型讲解

一、什么是散点图 散点图是一种用来展示两个或多个变量之间关系的图表形式。它可以帮助我们直观地观察变量之间是否存在相关性、趋势或异常值&#xff0c;常用于数据分析的初步探索阶段。 二、三种类型散点图 1. 基本二维散点图&#xff1a;最简单、最常用 基本二维散点图的…

模块方法模式(Module Method Pattern)

&#x1f9e0; 模块方法模式&#xff08;Module Method Pattern&#xff09; 模块方法模式是一种结构型设计模式&#xff0c;它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作&#xff0c;其他模块或系统可以通过调用这些模块的公开…

Python中的JSON库,详细介绍与代码示例

目录 1. 前言 2. json 库基本概念 3. json 的适应场景 4. json 库的基本用法 4.1 导 json入 模块 4.2 将 Python 对象转换为 JSON 字符串 4.3 将 JSON 字符串转换为 Python 对象 4.4 将 Python 对象写入 JSON 文件 4.5 从 JSON 文件读取数据 4.6 json 的其他方法 5.…

网狐旗舰大联盟组件源码私测笔记:结构分层、UI重构与本地实操全流程

作为一套衍生于传统网狐架构的源码版本&#xff0c;大联盟这套源码组件可谓是在经典基础上进行了深度重塑。与老版死板的框架风格不同&#xff0c;它不仅对界面做了大刀阔斧的重构&#xff0c;还在组件层级的组织上做了优化。本文将基于一整套源码进行深度解析&#xff0c;强调…